奇怪!!!
if(m_ClientSocket.Connect("192.168.0.18", m_nPort))
{
AfxMessageBox("m_ClientSocket.Connect OK!");
}
else
{
int nErrCode = m_ClientSocket.GetLastError();
CString sErrMsg;
sErrMsg.Format("连接失败!错误号=%d 。", nErrCode);
AfxMessageBox(sErrMsg);
}以上代码一直说:连接失败!错误号=0;
可实际上已经连接,而且运行正常。是不是MFC的BUG?我的地址是本机地址,用IPCONFIG /ALL看的,端口为2000。还有那个地址是否可以用机器名称,如"Server"代替?
if(m_ClientSocket.Connect("192.168.0.18", m_nPort))
{
AfxMessageBox("m_ClientSocket.Connect OK!");
}
else
{
int nErrCode = m_ClientSocket.GetLastError();
CString sErrMsg;
sErrMsg.Format("连接失败!错误号=%d 。", nErrCode);
AfxMessageBox(sErrMsg);
}以上代码一直说:连接失败!错误号=0;
可实际上已经连接,而且运行正常。是不是MFC的BUG?我的地址是本机地址,用IPCONFIG /ALL看的,端口为2000。还有那个地址是否可以用机器名称,如"Server"代替?
if(m_ClientSocket.Connect("192.168.0.18", m_nPort))
{
AfxMessageBox("m_ClientSocket.Connect OK!");
}
else
{
int nErrCode = m_ClientSocket.GetLastError();
TCHAR errMsg[2048] = {0};
FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM,
GetModuleHandle(TEXT("ws2_32.dll")), i,
NULL,
errMsg,
sizeof(errMsg)/sizeof(TCHAR),
NULL);
AddErr(_T(errMsg));//显示错误信息
);
}
起后在连则提示以上信息.m_ClientSocket.Connect("192.168.0.18", m_nPort)
为FALSE时连接肯定是失败的.
给你个解决办法,在m_ClientSocket的类的OnConnect()事件中处理你连接问题:在OnConnect事件中,你可以知道连接是成功还是失败,然后在处理。
因为是异步操作,所以有必要的延时。
用模型吧,自己来判断岂不是有点多此一举?
if(nErrCode==SOCKET_ERROR )
{
TCHAR errMsg[2048] = {0};
FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM,
GetModuleHandle(TEXT("ws2_32.dll")), i,
NULL,
nErrCode,
sizeof(errMsg)/sizeof(TCHAR),
NULL);
AddErr(_T(errMsg));//显示错误信息
}
FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM,
NULL,//GetModuleHandle(TEXT("ws2_32.dll")),
nErrorCode,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
errMsg,
sizeof(errMsg)/sizeof(TCHAR),
NULL);
AfxMessageBox((LPCTSTR)lpMsgBuf);//显示错误信息