linux下tcp编程
刚学linux下tcp编程,刚成功实现了一个简单的回射client-server。
但有个疑问,当客户端传完文件结束,此时它需要close(fd),那么我如何通知服务端你也可以关闭了呢?
我的想法是再手动传一个特殊字符串,告诉服务端你也可以close了,但不知道这样的想法是否正确?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
实际上是没有必要手动传的。当客户端调用 close 的时候,服务端会读到 EOF,这时候服务端就可以 close 了(如果不再给客户端发数据)
调用close之后,客户端会发送一个FIN包到服务端,服务端ACK之后也会发一个FIN包给客户端,客户端最终再发一次ACK就会正式结束本次连接,你在应用层是不需要任何额外的操作的。
但是:你结束的只是本次连接,在tcp中,标记一个连接是四元组(源地址,源端口,目标地址,目标端口),并非把整个服务端给关闭了 这一点很重要哦