Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sockets 多个send()方法调用和一个receive方法。这正常吗?_Sockets_Network Programming - Fatal编程技术网

Sockets 多个send()方法调用和一个receive方法。这正常吗?

Sockets 多个send()方法调用和一个receive方法。这正常吗?,sockets,network-programming,Sockets,Network Programming,如果在客户端,我连接到服务器并多次调用发送短数据的套接字上的Send()方法,服务器有时只接收一个“数据包”,其中包含许多发送方法的总和,这是正常的吗?是。TCP是一个流,没有单个“数据包”的概念-您应该期望每次接收一个字节的所有内容,所有内容合并在一起或介于两者之间的任何内容 唯一的保证是不会丢失任何数据,并且数据的到达顺序与您发送数据的顺序相同。是的,对于基于TCP流的套接字来说,这是完全正常的。默认情况下,启用了发送合并,从而减少了在短时间内传输的数据包数量。如果希望每个send()发送自

如果在客户端,我连接到服务器并多次调用发送短数据的套接字上的
Send()
方法,服务器有时只接收一个“数据包”,其中包含许多发送方法的总和,这是正常的吗?

是。TCP是一个流,没有单个“数据包”的概念-您应该期望每次接收一个字节的所有内容,所有内容合并在一起或介于两者之间的任何内容


唯一的保证是不会丢失任何数据,并且数据的到达顺序与您发送数据的顺序相同。

是的,对于基于TCP流的套接字来说,这是完全正常的。默认情况下,启用了发送合并,从而减少了在短时间内传输的数据包数量。如果希望每个
send()
发送自己的数据包,则必须禁用该算法。有时这在特殊情况下是需要的,但通常默认行为对于大多数套接字使用来说是足够和可取的。

即使禁用Nagle,您也可能在单个接收缓冲区中获得多个
send()
s,例如,因为多个IP数据报在计划接收过程之前到达,或者因为它们是在一个IP数据报中发送的,因为重新传输或发送窗口已满。的可能重复