我有一个在boost 1.53上编写的TCP客户端服务器应用程序。基于客户端命令,我必须启动服务器线程以将一些数据写入套接字。但我无法保证客户端应用程序将从此套接字开始读取。 在没有读取数据的情况下将数据写入套接字是否有任何问题?不会有套接字溢出或数据损坏吗?
期待听到您的想法。
THX, 梅德
答案 0 :(得分:0)
使用TCP,这不会有问题。服务器将检测到客户端没有读取,并推迟发送更多数据,直到客户端确认收到已发送的数据。在这种情况下,服务器线程将阻塞,直到客户端准备好接受更多数据。
TCP数据包也是校验和,因此如果传输中的任何一个被破坏,客户端将拒绝它们,服务器将重新发送它们。
答案 1 :(得分:0)
flow control aspect of TCP涵盖向慢速或非合作远程端发送数据时会发生什么。
假设您尝试发送数据,并且远程端的应用程序拒绝读取它。最终,远程端的接收窗口变满,它将通过发送窗口大小为0的ACK来指示此情况。您的网络堆栈会停止尝试发送新数据包,直到收到窗口大小较大的ACK。如果您继续尝试发送数据,它会累积在网络堆栈的发送缓冲区中。当缓冲区完全写入套接字块的一侧时。