大家好,我最近在用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;
}

     

解决方案 »

  1.   

    楼上各位说的都正常,因为我connect一个不用EventSelect的服务,都没问题.
      

  2.   

    //连接到服务器
    int nRet = connect(dlg->clisock,(sockaddr*)&(dlg->cli),sizeof(dlg->cli));////////////////////////////////////
    先判断一下
       dlg->clisock = INVALID_SOCKET???然后
      nRet = SOCKET_ERROR?????
      

  3.   

    楼上的,那些都没问题,就是connect返回的不对.返回这个错误WSAECONNREFUSED.
    我找了N久,茫然
      

  4.   

    把dlg->cli初始化的代码帖出来