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