我正在尝试使用 write function 编写 TCP 客户端如下:guide 。
我关闭网络并尝试发送包含 2 字节数据的 PING 包。
由于它是一个 TCP 客户端,我预计会返回某种错误,因为根本没有网络,服务器将无法接收消息,因此不会返回 ACK 数据包。但是,写入函数返回已写入的2个字节,看起来它根本没有验证来自服务器端的ACK数据包。
如何检查ACK以确定我的消息是否已成功发送并且服务器是否收到?
最佳答案
如果您在同一台计算机上运行客户端和服务器,它们将通过环回接口(interface)进行通信,因此拔出或停用出站网络接口(interface)不会改变任何内容。您的服务器和客户端可以愉快地通信。如果服务器和客户端之间确实没有任何连接,则 connect()
应该会失败,并且 errno 设置为 ENETUNREACH
或 ECONNREFUSED
(如果服务器拒绝连接。因此,您可能想要的是在您的计算机上运行客户端,并在另一台计算机或具有桥接网络的虚拟机中运行服务器。请注意,write()
成功返回仅意味着字节已缓冲以待发送。它甚至可能返回比您的消息包含的字节少的字节,表明缓冲区当前已满,您需要稍后尝试发送剩余的字节。
分析协议(protocol)实现的最佳方法是使用像wireshark这样的工具来查看哪些包实际上通过线路(或通过环回接口(interface))发送。
关于c - 如何在TCP客户端中使用write函数验证ACK包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56374881/