#include<winsock2.h>  
#include<stdio.h>  
int  main(int  argc,  char*  argv[])  
{  
           WSADATA  wsaData;  
           SOCKET  ListeningSocket;  
           SOCKET  NewConnection;  
           SOCKADDR_IN  ServerAddr;  
           SOCKADDR_IN  ClientAddr;  
           int  ClientAddrLen;  
           char  Message[100];  
           int  Port=5150;  
           if(WSAStartup(MAKEWORD(2,2),&wsaData)){  
                       printf("初始化Winsock库失败!");  
                       return  0;  
           }  
           ListeningSocket=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);  
           ServerAddr.sin_family=AF_INET;  
           ServerAddr.sin_addr.s_addr=htonl(INADDR_ANY);  
           ServerAddr.sin_port=htons(Port);  
           if(bind(ListeningSocket,(SOCKADDR  *)&ServerAddr,sizeof(ServerAddr))==SOCKET_ERROR){  
                       printf("\n绑定失败!,错误代码:%d",WSAGetLastError());  
                       return  0;  
           }  
           if(listen(ListeningSocket,5)==SOCKET_ERROR){  
                       printf("\n监听失败!错误代码:%d",WSAGetLastError());  
                       return  0;  
           }  
           NewConnection=accept(ListeningSocket,(SOCKADDR*)&ClientAddr,&ClientAddrLen);  
           if(NewConnection==SOCKET_ERROR){  
                       printf("\n连接失败!错误代码:%d",WSAGetLastError());  
                       return  0;  
           }  
           if(recv(NewConnection,Message,sizeof(Message),0)==SOCKET_ERROR){  
                       printf("\n接受数据失败!错误代码:%d",WSAGetLastError());  
                       return  0;  
           }  
           printf("\n%s",Message);  
           closesocket(NewConnection);  
           closesocket(ListeningSocket);  
           WSACleanup();  
           return  1;  
}  上面的代码中accept 调用总失败,错误代码是10014,请教高手是什么原因?

解决方案 »

  1.   

    WSAEFAULT 
    (10014) 
    Bad address. 
    The system detected an invalid pointer address in attempting to use a pointer argument of a call. This error occurs if an application passes an invalid pointer value, or if the length of the buffer is too small. For instance, if the length of an argument which is a struct sockaddr is smaller than sizeof(struct sockaddr). 
    你收到的地址有问题
      

  2.   

    ClientAddr 结构中的内容是不是应该
    搞以下
      

  3.   

    自己搞定了,原来是因为ClientAddrLen 必须初始化为 SOCKADDR_IN 结构的长度。昏!
    我开始还以为函数会返回长度的值给这个变量。不过还是很谢谢各位的帮忙!