基类 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;
}
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
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28