java - 我应该从两端关闭套接字吗?

标签 java sockets networking

我有以下问题。我的客户端程序监视本地网络中服务器的可用性(使用 Bonjour,但它不支持 mater)。一旦服务器被客户端应用程序“注意到”,客户端就会尝试创建套接字:Socket(serverIP,serverPort);

在某些时候,客户端可能会丢失服务器(Bonjour 说服务器在网络中不再可见)。因此,客户端决定关闭套接字,因为它不再有效。

某时服务器再次出现。因此,客户端尝试创建一个与该服务器关联的新套接字。但!服务器可以拒绝创建此套接字,因为它(服务器)已经有一个与客户端 IP 和客户端端口关联的套接字。发生这种情况是因为套接字是由客户端而不是服务器关闭的。它会发生吗?如果是这样,如何解决这个问题?

好吧,我知道客户端不太可能尝试从同一端口(客户端端口)连接到服务器,因为客户端会随机选择其端口。但它仍然可能发生(只是偶然)。对吧?

最佳答案

是的,一旦检测到故障就关闭套接字。

如果没有正确关闭,套接字将“卡住”在“close_wait”中。 即使套接字关闭,它的状态也会在 time_wait 中停留一小段时间。

但是,如果您将应用程序设计为对每个新连接使用不同的本地端口,则无需等待旧套接字关闭。

(当您创建一个完全不同的套接字时,因为套接字由远程 ip、远程端口、本地 ip 和本地端口标识。)

关于java - 我应该从两端关闭套接字吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2454550/

相关文章:

linux - 如何在非阻塞套接字上处理 OpenSSL SSL_ERROR_WANT_READ/WANT_WRITE

java - ListView 中的自定义行

java - 在java中初始化一个没有new运算符的对象

java - 套接字上并发读写的线程安全

batch-file - 创建批处理文件以轻松刷新网络设置?

hadoop - 更改hadoop集群中节点的FQDN

c++ - Omnet++ 和 MiXiM

java - 从日期减去一小时 SQL

java - 查询执行时间与完成 Java 查询调用之间的差异

java - java中如何通过socket发送EOF