TcpClient.ReceiveBufferSize 属性默认是 8192 ,如果返回的流数据大于这个值,是不是我就不能收到完整的数据,必须将ReceiveBufferSize数据设置更大才行?

解决方案 »

  1.   

    一般在tcp或者udp上进行传输数据,当数据比较大的时候,都进行分段传输,例如以1024为一个包进行传输。
      

  2.   

    TcpClient.ReceiveBufferSize 属性默认是 8192 ,如果返回的流数据大于这个值,是不是我就不能收到完整的数据,必须将ReceiveBufferSize数据设置更大才行?
    //这个流程是这样的,比如你调用SEND方法发送一个byte[65535]的时候,其实是把这个65535的数据一次一次的发送到SOCKET内部的缓冲区去,SendBufferSize默认是8192,所以每一次交给TCP的数据其实只有8192,然后TCP分段把他们全部发送出去,直到发送完你的65535数据。
    而接收的时候,也是如此,ReceiveBufferSize 属性默认是 8192,很明显,不管来的数据有多大,但是接收缓冲区内部最大只有8192,每一次等待接收的数据其实只有8192这么大。OK,
    难道我们RECEIVE的时候只能收到这8192吗,当然不是了,RECEIVE的时候他会一次一次的重接收缓冲区里取数据来,直到取完为止。
    其实很简单,只要你用的是TCP,就不用去担心数据会丢。