本帖最后由 VisualEleven 于 2011-10-25 23:33:56 编辑

解决方案 »

  1.   

    我也遇到过,加个if recvfrom 失败 break;
    这个问题是由于客户端closeConnection了,recvfrom就一直失败
      

  2.   

    额,不好意思,这是服务器端的代码:
    #include <stdio.h>
    #include <winsock2.h>
    int main()
    {
    WORD wVersionRequested;
    WSADATA wsaData; //WSAStartup(1,1);
    wVersionRequested=MAKEWORD(1,1); int err;

    err=WSAStartup(wVersionRequested,&wsaData);
    if(err!=0)
    return 0;
    if(LOBYTE(wsaData.wVersion)!=1||HIBYTE(wsaData.wVersion)!=1)
    {
    WSACleanup();
    return 0;
    } SOCKET sockSrv=socket(AF_INET,SOCK_STREAM,0);

    SOCKADDR_IN addSrv;
    addSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
    addSrv.sin_family=AF_INET;
    addSrv.sin_port=htons(6000);

    bind(sockSrv,(sockaddr*)&addSrv,sizeof(SOCKADDR)); listen(sockSrv,5);

    SOCKADDR_IN addClient;
    int len=sizeof(SOCKADDR);
    while(1)
    {
    SOCKET sockConn=accept(sockSrv,(sockaddr*)&addClient,&len);
    char sendBuf[100];
    sprintf(sendBuf,"welcome %s to whitelee's home\n",inet_ntoa(addClient.sin_addr));
    send(sockConn,sendBuf,strlen(sendBuf)+1,0);
    char recvBuf[100];
    recv(sockConn,recvBuf,100,0);
    printf("%s\n",recvBuf);
    closesocket(sockConn);
    } return 0;
    }
    下面的是客户端的。
    #include <stdio.h>
    #include <winsock2.h>
    int main()
    {
    WORD wVersionRequested;
    WSADATA  wsaData; int err;
    wVersionRequested=MAKEWORD(1,1);
    err=WSAStartup(wVersionRequested,&wsaData); if(err!=0)
    return 0;
    if(LOBYTE(wsaData.wVersion)!=1||HIBYTE(wsaData.wVersion)!=1)
    {
    WSACleanup();
    return 0;
    } SOCKET sockClient=socket(AF_INET,SOCK_STREAM,0); SOCKADDR_IN addrClient;
    addrClient.sin_addr.S_un .S_addr =inet_addr("192.168.1.2");
    addrClient.sin_family=AF_INET;
    addrClient.sin_port=htons(6000);

    connect(sockClient,(sockaddr*)&addrClient,sizeof(SOCKADDR)); char recvBuf[100];
    recv(sockClient,recvBuf,100,0);
    printf("%s\n",recvBuf);
    send(sockClient,"this is lisi",strlen("this is lisi")+1,0); closesocket(sockClient);
    WSACleanup();
    return 0;
    }
      

  3.   


     
    bind(sockSrv,(sockaddr*)&addSrv,sizeof(SOCKADDR));
    和connect(sockClient,(sockaddr*)&addrClient,sizeof(SOCKADDR));
    最好改成
    bind(sockSrv,(SOCKADDR_IN*)&addSrv,sizeof(SOCKADDR_IN));
    和connect(sockClient,(SOCKADDR_IN*)&addrClient,sizeof(SOCKADDR_IN));
    还有每部的执行你都要加上判断,向bind,send,recv这些方法都可能出错的,你不加判断就很容易导致错误
      

  4.   

    右键工程,然后选择一个叫,set as setup project...的选项,然后这个工程就是当前的工程了