我是网络编程的新手,我正在尝试理解发送和recv等功能如何在TCP连接下工作。我知道在客户端和服务器之间的连接中,例如,当客户端管理向服务器发送消息,消息被拆分在不同的包中,当它到达时,服务器部分检查包的总和是否与发送前相同,如果没有则发送消息作为批准返回客户端。如果出现问题,客户端将重新发送该消息。
我不明白的是,如果您从客户端发送消息并在服务器上睡10秒钟,您仍然可以在客户端执行您想要的操作,例如发送功能正在另一个线程中执行,或者如果您在这10秒内使用多次发送功能,则该消息将作为该时间内使用的消息的组合到达。
如果有人能解释这种情况,我将非常感激!
答案 0 :(得分:3)
这是由您的操作系统的TCP / IP网络堆栈实现的。
TCP / IP堆栈......
在您编写的情况下,客户端正在填写发送方OS的发送缓冲区和接收方OS的接收缓冲区。您的客户端可以发送非阻塞,直到两个缓冲区都已满。然后它将阻塞,直到服务器再次调用recv。