【发布时间】:2017-02-28 19:24:07
【问题描述】:
我知道已经有几个类似的问题,但我没有找到适合我的情况的答复。 请考虑一个简单的客户端-服务器应用程序,我必须在其中设置 TCP 连接。
在服务器端,我通过代码等待 TCP 连接:
ServerSocket mySS= new ServerSocket(10000);
Socket mySocket_ServerSide= mySS.accept();
在客户端我通过代码请求 TCP 连接:
Socket mySocket_ClientSide= new Socket();
mySocket_ClientSide.setReuseAddress(true);
mySocket_ClientSide.bind(new InetSocketAddress(5555)); //always using the same port
mySocket_ClientSide.connect(new InetSocketAddress(serverIP,10000), myTimeout);
everythink 第一次工作时,我在 TCP 连接上完成工作(例如文件传输),然后我关闭(在客户端)与服务器的连接,使用:
mySocket_ClientSide.close();
几秒钟后,我必须再次连接到服务器,但出现“地址已在使用中:连接”异常。
我假设客户端进程的状态处于 TIME_WAIT,正如我在本网站的几个问题中所读到的那样。但是我不应该因为 setReuseAddress(true) 而再次使用这个端口吗?
出于某些原因我必须始终绑定到同一个端口(在示例中为 5555)。是否有任何解决方案可以让我绑定到同一个端口?我犯了什么错误?
提前谢谢你 福斯托
【问题讨论】:
-
“一些原因”是什么?
-
出于什么原因?它们会阻止您进行多个连接,甚至是间隔不到两分钟的连续连接。如果这是 netadmin 强加的防火墙约束,请取消它。它不会增加安全性,只会导致巨大的编程问题。注意肯定错误是“地址已在使用中:绑定”?
-
您好,感谢您的回复。操作系统是Windows。我的应用程序目前是根据固定端口的要求设计的。我必须重新设计它并做一些工作来改变它......但我明白我必须这样做......
标签: java sockets exception tcp