java.net.NoRouteToHostException: Address not available

来源:2-2 Socket与TCP、UDP

他门说这就是人生

2021-06-28

老师,我刚关闭TCP客户端的socket连接就进行重连,会报以上错误,我应该怎样做到一断开连接就马上可以重连呢?

我网上搜到的解释是:

由于客户端连接端口用尽,无法建立socket连接所致,虽然socket正常关闭,但是端口不是立即释放,而是处于 TIME_WAIT 状态,默认等待60s后释放。

ps: 我的客户端是安卓客户端,不是windows和linux,可以在Socket对象上直接设置吗?

写回答

1回答

Qiujuer

2021-07-16

一般来说关闭操作是一个业务的API操作,可能会立即返回,并中断业务的数据。但系统底层需要进行挥手和资源清理等操作,可能需要一定的时间才能重新利用该端口。

有2种办法解决:

  1. 客户端不固定端口,采用随机端口的模式链接服务器

  2. 客户端设置复用端口,但可能会存在链接后收到异常残留数据 sock.setReuseAddress(true);

1
2
Qiujuer
回复
他门说这就是人生
是的哈~
2021-07-16
共2条回复

Socket网络编程进阶与实战 系统掌握Socket核心技术

理论+实践,系统且深入掌握Socket核心技术,从容应对各种Socket应用场景的不二之选

2316 学习 · 476 问题

查看课程