我的客户端大致如下,运行后跟服务器通信时,第一次输入数据能发送到服务器端,第二次不行,第三次就输出:“传输数据失败!”,不知道怎么回事??? SOCKADDR_IN addrSrv;

addrSrv.sin_family=AF_INET;
addrSrv.sin_addr.S_un.S_addr=inet_addr("127.0.0.1"); //本地机子测试
addrSrv.sin_port=htons(6000); //跟服务器指定端口相同
SOCKET sockClient; sockClient=socket(AF_INET,SOCK_STREAM,0);

char sendbuff[200]="";

connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR)); //向服务器发出连接请求
for(;;)
{

 /*send data to server*/
 printf("Input data:\n");
 if(gets(sendbuff) == NULL)
 break;
 else
 {
   if(SOCKET_ERROR == send(sockClient, sendbuff, strlen(sendbuff)+1, 0))
   {
     printf("传输数据失败!\n");
     break;
   }
 }

 }//end :for closesocket(sockClient);

解决方案 »

  1.   

    第一次输入数据能发送到服务器端,第二次不行,第三次就输出:“传输数据失败!”,
    那是不是第一次输入数据就调出循环~~~
    那你看看sendbuff变化~~
      

  2.   

    我觉得可能是第一次发送完,第二次有可能是if(gets(sendbuff) == NULL)
     break;
    跳出for循环而结束~~~
      

  3.   

    我觉得可能是第一次发送完,第二次有可能是if(gets(sendbuff) == NULL)
     break;
    跳出for循环而结束~~~
    ----------------------------------------------------
    我改成这样:cin>>sendbuff;也无济于事
      

  4.   

    服务器端基本代码如下,大家帮看看:
         .......
        SOCKET  SockSrv;
       SockSrv=socket(AF_INET,SOCK_STREAM,0); //创建套接字
       
       SOCKADDR_IN  addrSrv;  
       addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
       addrSrv.sin_family=AF_INET;
       addrSrv.sin_port=htons(6000);
      
       if(bind(SockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR))) //绑定套接字到一个IP和指定端口
       {
          MessageBox(NULL,"绑定失败!","你好!",MB_OK);
    return 0;
       
       }
      
       listen(SockSrv,5);  //将套接字设置为监听模式等待连接请求
       char sendbuff[200]="欢迎你访问服务器端";
       char recvbuff[200]="";
       SOCKET  sockconn; //处于连接状态的套接字
       
       SOCKADDR_IN addrClient;
       int length=sizeof(SOCKADDR);
       
       while(1)
       {   
       sockconn=accept(SockSrv,(SOCKADDR*)&addrClient,&length);
       
       recv(sockconn,recvbuff,200,0); //不断的监听
       cout<<recvbuff<<endl;
       send(sockconn,sendbuff,strlen(sendbuff)+1,0);//发送一个收到数据的信息给客户端   
       closesocket(sockconn);
       }
      

  5.   

    我只看出你的服务器端有问题,应为是tcp传输,你在循环里一次循环就要关闭连接,这样可顶是发送失败,但为什么第二次没提示我也不了解.