刚学linux下tcp编程,刚成功实现了一个简单的回射client-server。
但有个疑问,当客户端传完文件结束,此时它需要close(fd),那么我如何通知服务端你也可以关闭了呢?
我的想法是再手动传一个特殊字符串,告诉服务端你也可以close了,但不知道这样的想法是否正确?
刚学linux下tcp编程,刚成功实现了一个简单的回射client-server。
但有个疑问,当客户端传完文件结束,此时它需要close(fd),那么我如何通知服务端你也可以关闭了呢?
我的想法是再手动传一个特殊字符串,告诉服务端你也可以close了,但不知道这样的想法是否正确?
调用close之后,客户端会发送一个FIN包到服务端,服务端ACK之后也会发一个FIN包给客户端,客户端最终再发一次ACK就会正式结束本次连接,你在应用层是不需要任何额外的操作的。
但是:你结束的只是本次连接,在tcp中,标记一个连接是四元组(源地址,源端口,目标地址,目标端口),并非把整个服务端给关闭了 这一点很重要哦
7 回答5.3k 阅读
4 回答4k 阅读
2 回答5.9k 阅读✓ 已解决
2 回答2.5k 阅读✓ 已解决
1 回答2.3k 阅读✓ 已解决
2 回答3.2k 阅读
1 回答3.6k 阅读
实际上是没有必要手动传的。当客户端调用 close 的时候,服务端会读到 EOF,这时候服务端就可以 close 了(如果不再给客户端发数据)