在没有服务器端异常的情况下安全关闭Java Socket

时间:2015-01-23 11:08:42

标签: java sockets tcp

从客户端关闭套接字连接的最安全方法是什么。首先关闭输入或立即关闭()连接?

3 个答案:

答案 0 :(得分:0)

如果您的协议(TCP顶部)不包含任何关闭会话的消息/握手,则必须通过关闭TCP连接来执行此操作。

关闭TCP连接有两种方法:

  • graceful:使用TCP SYN,传输(尝试)所有未传送的数据。 read()的{​​{1}}返回-1;
  • ungraceful:使用TCP RST,丢弃所有未传递的数据。 InputStream的{​​{1}}会引发异常。

两者都可以在带有Socket的close()函数的java中完成。 优雅是默认值。如果在关闭()之前完成read(),则表示不合适。

答案 1 :(得分:0)

关闭套接字已经关闭了输入和输出。你不需要明确地做其中任何一个。

答案 2 :(得分:-2)

我更愿意发表评论,但由于我缺乏声誉,我不能,这不是一个完整的答案,对不起:

我相信总会引发一个异常,你应该在function()中捕获一个IOException,它从套接字读取器中获取数据。这种方式IOException意味着套接字关闭,任何其他类型的异常都是错误。