我自己写了个基于TCP的文件传输程序(用了两个线程)主线程是服务器端(接收方),当对话框初始化后就阻塞在accept上了,等待连接请求。另一个线程是客户器端(发送方)。
发送方:
   while(feof(pfile))
   {
     connect();
     send();
     .....
     
   }
接收端:
   while(true)
   {
     m_acceptsoc=accept();
     recv(m_acceptsoc,recv_buf....);
     .....
   }
通过跟踪调试发现:
发送方式一次性全部读完文件,直到文件结尾,但是接收端只收到一次?并不是想象中的send->recv->send....这样的?
怎么样才能实现文件的有序传输(send->recv->send....)?

解决方案 »

  1.   

    socket是双工的,不是收一下接一下的
      

  2.   

    TCP是交互流,一边发送,一边接收...
      

  3.   

    它本来就不是send->recv->send....这种方式TCP是流式的传输,也就是说不是每次的send都需要一个recv来对应接收的,有可能你好几次send的东西,在接收方一个recv就全收到了,也有可能发送方的一个send,接收方要recv好多次才能收完
      

  4.   

    send是发送出去的,receive的时候,会有个返回长度。
    比如某个文件长度为100,N次发送出去有两种方式,一种是已知文件长度,另外一种是receive返回值为空,则判断套接字缓存已无东西。单独一次的send的长度,不一定等于receive的长度所以,send->receive->send->recieve这种逻辑本身就是错的。应该为:send...send...
    receive...receive其中,当send的累计长度等于receive的长度时,才表明发送的内容已被完全接收。希望对楼主有帮助。