TCP协议是面向连接的流协议,也就是说数据没有边界。那可不可以一次性发送100K的数据。
#define BUFFER_SIZE 1024000
send (sock, pbuf, BUFFER_SIZE, 0);

解决方案 »

  1.   

    你用的是socket,
    socket是在TCP上进行封装的,socket的buffer具体也是有限制的,具体值忘记了。关键是你socket里的buffer  真正处理是在TCP中,会对其进行分包再发送,一般超过1K就会分包,具体处理就是TCP底层的事了,到底怎样的分其中很复杂,但TCP协议比一般人自己拆分好很多了。一般你的buffer越大问题越多吧,最好不要超过1k,其实你这样发送socket是很不合理的,send有返回值,应当判断是否发送完全完全,做个循环判断,在recv()时亦是如此。
      

  2.   

    这只是一个讨论题,我并没有在实际中这样去做。但考虑到TCP协议是流协议,发送方只管发,而不用考虑数据边界,而接收方尽管接收,也不用考虑数据边界。因此我就想,如果不考虑 send 阻塞的话, 让TCP 根据MTU自已决定分包的大小,然后发送给接收方。而接收方有可能是分很多次接收完这个数据。调用了很多次recv.然后再把数据组起来。我认为这样的效率会更高。但实际上我没有这样做过,只是一个想法。大家可以讨论。
      

  3.   

    TCP连接时,纯在一个MSS(最大报文段长度),表示TCP传往另外一段的最大块数据的长度,建立连接时,连接的双方需要通告各自的MSS。也就是说一边想发送多大,得看另外一端能接收多大。详见《TCP/IP详解》卷1。
      

  4.   

    看看TCP协议中的“发送窗口”大小