WSADATA wsaData;
    SOCKET s,ClientSock;
    SOCKADDR_IN sockAddr,ClientAddr;
    int length;
    char buffer[2048]; WSAStartup(0x0101,&wsaData);    s = socket(AF_INET,SOCK_STREAM,IPPROTO_IP);    sockAddr.sin_family = AF_INET;
    sockAddr.sin_port = htons(7710);
    sockAddr.sin_addr.s_addr = htonl(INADDR_ANY);
    
bind(s,(struct sockaddr *)&sockAddr,sizeof(sockAddr);
    listen(s,8); ClientSock = accept(s,(struct sockaddr *)&ClientAddr,&length);
if (ClientSock == INVALID_SOCKET)
{
Application->MessageBoxA("accept() failed.","系统提示",MB_ICONWARNING);
break;
}
length = recv(s,buffer,2048,0);
    buffer[length] = '\0';    closesocket(s);
    WSACleanup();为什么总是出现accept失败的错误。

解决方案 »

  1.   

    do you init your socket?
      

  2.   

    设置IPPROTO_IP
    WINSOCK版本必须为2.2,
    WSAStartup(0x0101,&wsaData);    s = socket(AF_INET,SOCK_STREAM,IPPROTO_IP);改为
       if(WSAStartup(MAKEWORD(2,2),&wsaData)!=0) 
        { 
          printf("\nWSAStartup() failed:%d",GetLastError()); 
          __leave; 
        } 
        s=socket(AF_INET,SOCK_STREAM,IPPROTO_IP); 
        if(s==INVALID_SOCKET) 
        { 
          printf("\nsocket() failed:%d",GetLastError()); 
          __leave; 
        }
      

  3.   

    length = sizeof(ClientAddr);
    ClientSock = accept(s,(struct sockaddr *)&ClientAddr,&length);
      

  4.   

    socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    而且你的程序不检查bind,listen的返回值,这种错误只有初学者可以原谅
      

  5.   

    MD!!我又试了试!!!在我机子上无问题!!!UP
      

  6.   

    使用SOCK_STREAM初始化socket后,调用accept前需要先调用listen
      

  7.   

    socket,bind ,listen,accept使用时,测试一下返回值,看看哪个地方不对!
      

  8.   

    length = sizeof(ClientAddr);
    ClientSock = accept(s,(struct sockaddr *)&ClientAddr,&length);