【发布时间】:2020-01-10 05:08:09
【问题描述】:
存在启用了 TLS 1.2 的现有套接字通信,为此我已包含单向/双向支持,这样做时我观察到套接字中频繁重置。 在使用线鲨分析数据包时,观察到发送的 FIN、ACK 和 RST 标志,我认为这是重置或中止连接的原因。
我的查询:
我相信在套接字对话期间,在许多情况下,我在尝试 readObject() 时观察到 EOFexcetpion。这会导致套接字重置或断开连接吗?
如果我希望套接字连接永久连接,我如何忽略 FIN 和 RST 标志并保持套接字连接永久?
当套接字发现空闲然后断开连接时是否有效。是通过RST还是FIN标志?
【问题讨论】:
-
1.
EOFException本身不能导致 RST,但是您接下来的响应可以。 2. 你不能:见@jiJmGarrison 的回答。 3. (a) 是的,丢失空闲连接是有效的,并且 (b) 断开连接会导致 FIN,除非你做了一些奇怪的事情,比如没有读取所有待处理的数据。 -
@user207421 ,我理解我的服务器代码会生成一个带有执行器服务的套接字实例,并且如果套接字断开连接,它会在循环中重新创建。但是由于某种原因,我在此处观察到的服务器代码在发送消息套接字后关闭,并且客户端尝试 readObject() 过早抛出导致套接字 close() 的 EOF 异常,为了解决这个问题,我可以制作 socket.shutdown()这样客户端才会有幸在实际关闭之前仍然阅读吗?我的意思是在服务器端和客户端都添加 socket.shutdown() 而不是 socket.close() ?
-
服务器不会重新创建任何东西。它接受新的连接。
EOFException表示对端提前关闭了连接。如果它发生在readObject()你在发送端做错了什么。据我所知,这里不需要shutdown()。您需要发布客户端代码。