java - 我可以关闭并重新打开套接字吗?

标签 java sockets networking

我学习了一个使用套接字的例子。在此示例中,客户端向服务器发送请求以打开套接字,然后服务器(监听特定端口)打开套接字,一切正常,套接字从双方(客户端和服务器)“打开”。

但我仍然不清楚这东西有多灵活。例如,客户端是否可以关闭一个打开的(从两端)套接字并再次重新打开它(在服务器保持套接字打开的情况下)。

服务器是否有可能“知道”客户端关闭了套接字?客户端是否有可能知道服务器端关闭了套接字?

已添加:

还有一件对我来说很重要的事情。如果应用程序(不是主服务器或客户端)崩溃、异常终止、终止,会发生什么情况?它会关闭应用程序端打开的所有套接字吗?

添加 2:

如果套接字一侧的应用程序关闭(终止、关闭、终止)然后再次打开(在相同的 IP 地址和相同的端口上)会怎样?我们应该在两个应用程序之间创建一个新套接字,还是可以使用旧套接字(在崩溃之前创建)。

最佳答案

套接字可用于很多事情,这些问题的答案会改变,但我假设您在谈论 TCP。

For example, is it possible for the client to close an opened (from both ends) socket and to reopen it again (under condition that the server keeps the socket opened).

不,因为 TCP 将执行再见,您无法从那里再次获取连接。您必须再次进行三次握手,然后开始全新的连接。

Is it possible for the server to "know" that a socket was closed on the client side? Is it possible for the client to know that a socket was closed on the server side?

Yes . TCP 可以发送再见数据包或一侧超时,在这两种情况下都完全有可能检测到这些情况。

关于java - 我可以关闭并重新打开套接字吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2456607/

相关文章:

java - 嵌套 do while 循环从一个循环跳转到另一个循环

java - 如何找到哪些对象产生的垃圾最多

c# - 带有 .net 核心 2.0 的信号器

c - Ip 结构 C 参数

networking - OPC 与 SNMP 协议(protocol)

java - 在运行时用 TCP 套接字替换打洞/STUN UDP 套接字

azure - 如何为站点到站点连接配置 Azure 功能?

java - 递归断言汉诺塔中的移动次数

java - 如何从 jar 文件中获取函数签名?

c# - 是否可以重置 ServicePointManager?