CSocket类的Send()函数问题:连续发送多次为什么只收到一次?

2024-11-29 11:19:29
推荐回答(2个)
回答1:

楼主可能没搞清楚,当每个socket建立后会有一个发送缓冲区和一个接收缓冲区,windows系统默认是8KB,send调用成功以后数据并没有立即发出去,而只是把发送的数据复制到发送缓冲区,由操作系统底层实现发送功能,发送到接受端的接收缓冲区。为了减轻网络负担,一般的TCP链接用了nagle算法,并不是发送缓冲区有数据就会发送的。
对于接收端来说,receive(char *buf,num)只是从接收缓冲区里面取数据,返回的值就是取得的数据大小。你多次send,如果数据量不大,而num的值超过了发送的总值,那么就会一次取完接受缓冲区的数据。
不知道这样解释楼主清楚了没有。

回答2:

receive(char *buf,num)的返回值就是本次收到的数据的长度

和你两次发送的数据的长度比较一下