+ -
当前位置:首页 → 问答吧 → 基类 CSocket与 CAsyncSocket 不同

基类 CSocket与 CAsyncSocket 不同

时间:2011-12-17

来源:互联网

自己写了个Socket类 
class CMySocket: public CAsyncSocket
{
  BOOL Connect(CString strIPDest,UINT nPort); //代码见下面
}

问题是不知道为什么当我的CMySocket派生自CAsyncSocket是,我调用Connect(ip,port)会失败,GetLastError结果是WSAEISCONN The socket is already connected.
但是我要是基类选自CSocket 调用Connect(IP,port)能成功。


BOOL CMySocket::Connect(CString strIPDest, UINT nPort)
{
USES_CONVERSION_EX;
SOCKADDR_IN sockAddr;
memset(&sockAddr,0,sizeof(sockAddr));

if (strIPDest.IsEmpty())
return FALSE;

LPSTR lpszAscii = T2A_EX(strIPDest, _ATL_SAFE_ALLOCA_DEF_THRESHOLD);
if (lpszAscii == NULL)
return FALSE;

sockAddr.sin_family = AF_INET;
sockAddr.sin_addr.s_addr = inet_addr(lpszAscii);
if (sockAddr.sin_addr.s_addr == INADDR_NONE)
{
LPHOSTENT lphost;
lphost = gethostbyname(lpszAscii);
if (!lphost)
return FALSE;

sockAddr.sin_addr.s_addr = ((LPIN_ADDR)lphost->h_addr)->s_addr;
}

sockAddr.sin_port = htons((u_short)nPort);

if (!ConnectHelper((SOCKADDR*)&sockAddr, sizeof(SOCKADDR)))
return FALSE; // 基类 选CAsyncSocket就return FALSE
return TRUE;
}

作者: vipshenji   发布时间: 2011-12-17

如果不重写Connect 直接调用基类的Connect也是同样的情况。若派生自CAsyncSocket m_mySocket.Connect(strIp,uPort) 返回0.错误为WSAEISCONN The socket is already connected. 其实也是连接了 但是为什么函数返回0. 很奇怪。。。。

作者: vipshenji   发布时间: 2011-12-17