大家好,我最近在用WSAEventSelect.写了个服务端,然后用客户端测试的时候。却发现:
SERVER端WSAWaitForMultipleEvents,然后CLIENT端connect,但是返回的却是WSAECONNREFUSED,然后,我TELNET服务端口的时候,WSAWaitForMultipleEvents却返回了.我这个FD_ACCEPT|FD_CLOSE两个事件.我不明白,我TELNET的时候,WSAWaitForMultipleEvents可以返回,但是,我CLIENT端connect的时候为什么WSAWaitForMultipleEvents不返回,且connect的返回值是WSAECONNREFUSED.请各位高手指点在下一二.谢谢!后面附代码SERVER端代码:
InternetAddr.sin_family = AF_INET;
InternetAddr.sin_addr.s_addr = htonl(INADDR_ANY);
InternetAddr.sin_port = htons(PORT); if (bind(Listen, (PSOCKADDR) &InternetAddr, sizeof(InternetAddr)) == SOCKET_ERROR)
{
printf("bind() failed with error %d\n", WSAGetLastError());
return;
} CreateSocketInformation(Listen);//创建事件
if (WSAEventSelect(Listen, EventArray[EventTotal - 1], FD_ACCEPT|FD_CLOSE) == SOCKET_ERROR)
{
printf("WSAEventSelect() failed with error %d\n", WSAGetLastError());
return;
} if (listen(Listen, 10))
{
printf("listen() failed with error %d\n", WSAGetLastError());
return;
}
while(TRUE)
{
// Wait for one of the sockets to receive I/O notification and
if ((Event = WSAWaitForMultipleEvents(EventTotal, EventArray, FALSE,
WSA_INFINITE, FALSE)) == WSA_WAIT_FAILED)
{
printf("WSAWaitForMultipleEvents failed with error %d\n", WSAGetLastError());
return;
}
......
}CLIENT端代码
//连接到服务器
int nRet = connect(dlg->clisock,(sockaddr*)&(dlg->cli),sizeof(dlg->cli));
if ( nRet!=0 && dlg->m_bInitSock)
{
//连接失败
int nError= WSAGetLastError(); //就这里,返回值是10061
AfxMessageBox("connect service error!");
return 0;
}
SERVER端WSAWaitForMultipleEvents,然后CLIENT端connect,但是返回的却是WSAECONNREFUSED,然后,我TELNET服务端口的时候,WSAWaitForMultipleEvents却返回了.我这个FD_ACCEPT|FD_CLOSE两个事件.我不明白,我TELNET的时候,WSAWaitForMultipleEvents可以返回,但是,我CLIENT端connect的时候为什么WSAWaitForMultipleEvents不返回,且connect的返回值是WSAECONNREFUSED.请各位高手指点在下一二.谢谢!后面附代码SERVER端代码:
InternetAddr.sin_family = AF_INET;
InternetAddr.sin_addr.s_addr = htonl(INADDR_ANY);
InternetAddr.sin_port = htons(PORT); if (bind(Listen, (PSOCKADDR) &InternetAddr, sizeof(InternetAddr)) == SOCKET_ERROR)
{
printf("bind() failed with error %d\n", WSAGetLastError());
return;
} CreateSocketInformation(Listen);//创建事件
if (WSAEventSelect(Listen, EventArray[EventTotal - 1], FD_ACCEPT|FD_CLOSE) == SOCKET_ERROR)
{
printf("WSAEventSelect() failed with error %d\n", WSAGetLastError());
return;
} if (listen(Listen, 10))
{
printf("listen() failed with error %d\n", WSAGetLastError());
return;
}
while(TRUE)
{
// Wait for one of the sockets to receive I/O notification and
if ((Event = WSAWaitForMultipleEvents(EventTotal, EventArray, FALSE,
WSA_INFINITE, FALSE)) == WSA_WAIT_FAILED)
{
printf("WSAWaitForMultipleEvents failed with error %d\n", WSAGetLastError());
return;
}
......
}CLIENT端代码
//连接到服务器
int nRet = connect(dlg->clisock,(sockaddr*)&(dlg->cli),sizeof(dlg->cli));
if ( nRet!=0 && dlg->m_bInitSock)
{
//连接失败
int nError= WSAGetLastError(); //就这里,返回值是10061
AfxMessageBox("connect service error!");
return 0;
}
int nRet = connect(dlg->clisock,(sockaddr*)&(dlg->cli),sizeof(dlg->cli));////////////////////////////////////
先判断一下
dlg->clisock = INVALID_SOCKET???然后
nRet = SOCKET_ERROR?????
我找了N久,茫然