比如在服务器端的socket一次send 一个100字节的数据过来(基于tcp协议),那么客户端的socket是否可以多次调用receive函数来接收这个100个字节的数据呢?(比如调用10次receive函数,每次接收10个字节)。没有系统学过网络编程,现在被临时分配了一个维护一个c/s系统的任务,恳请大家赐教!

解决方案 »

  1.   

          网上一位大侠说:本来就应该这样做~一次是不保证能全部接收~你应该接收N次~直接全部接收完毕      
         我在想:为什么一次是不保证能全部接收,tcp协议不是保证接收数据的吗?假如我开辟的接收缓冲区够大,应该可以一次接收吧
      

  2.   

    TCP是数据流传输协议,如果你理解了什么是流,也就好办啦。
      

  3.   


    嗯,理解TCP(数据流)和UDP(数据报)的区别。
      

  4.   


         TCP是个"流"协议,所谓流,就是没有界限的一串数据.大家可以想想河里的流水,是连成一片的,其间是没有分界线的.但一般通讯程序开发是需要定义一个个相互独立的数据包的,比如用于登陆的数据包,用于注销的数据包.由于TCP"流"的特性以及网络状况,在进行数据传输时会出现以下几种情况.
    假设我们连续调用两次send分别发送两段数据data1和data2,在接收端有以下几种接收情况(当然不止这几种情况,这里只列出了有代表性的情况).
    A.先接收到data1,然后接收到data2.
    B.先接收到data1的部分数据,然后接收到data2余下的部分以及data2的全部.
    C.先接收到了data1的全部数据和data1的部分数据,然后接收到了data2的余下的数据.
    D.一次性接收到了data1和data2的全部数据.
      

  5.   

    如果你理解了SOCKET有缓冲也就明白了.
      

  6.   

    TCP协议在发送和接收时,会对数据进行重新组合,可能多次发送的数据一起接收到,也可能一次发送的数据会分多次到达,每次只能接收到一部分,TCP保证数据有序到达,但发送与接收不是一一对应的,在程序设计上应该多次接收,直到所需数据全部收到(或遇到错误)为止。
      

  7.   

    TCP协议在发送和接收时,会对数据进行重新组合,可能多次发送的数据一起接收到,也可能一次发送的数据会分多次到达,每次只能接收到一部分,TCP保证数据有序到达,但发送与接收不是一一对应的,在程序设计上应该多次接收,直到所需数据全部收到(或遇到错误)为止。