===Socket释放端口的问题===

com_use 2006-11-08 08:59:38
初始化了一个Socket,它占用了一个端口,现在用Socket.close,结果Socket的状态怎么还是连接的?(用的是Socket.isConnected判断),现在希望传输完成后,能关闭Socket,并及时释放被占用的端口,释放端口是关键,请问各位高手,该如何做,小弟试来试去都没有成功,尽管Socket已经close了,可是端口还是被占着。
--------------------------------------------
public void run() {
Socket clientSocket;
ObjectOutputStream o_toServer;
ObjectInputStream o_fromServer;
for (int iip = 1; ; iip++) {
vecvec receive_ip = new vecvec(); //vecvec为自定义类型
try {
data.check = ""; //data为自定义要发送的类的实例化
data.message = "";
clientSocket = new Socket(Server_ip, 8100, localAddress, port); //port为自指定端口
o_toServer = new ObjectOutputStream(clientSocket.getOutputStream());
o_toServer.writeObject(data);
o_fromServer = new ObjectInputStream(clientSocket.getInputStream());
receive_ip = (vecvec) o_fromServer.readObject();
o_toServer.close();
o_fromServer.close();
clientSocket.close();
System.out.println("clientSocket.isClosed: " + clientSocket.isClosed() + " clientSocket.isConnected: " +clientSocket.isConnected()); //clientSocket.isConnected的返回结果为什么是true
while (true) {
try {
sleep(3000);
} catch (InterruptedException er) {
System.out.println("等待异常" + er);
}
clientSocket = null;
System.out.println("clientSocket's status: " + clientSocket);
break;
}
} catch (InvalidClassException es) {
System.out.println("客户类异常!" + "." + es);
} catch (NotSerializableException es) {
System.out.println("客户类没有串行化!" + "." + es);
} catch (IOException es) {
System.out.println("不能写到服务器!" + "." + es);
return;
} catch (ClassNotFoundException ees) {
System.out.println("readObject()异常" + ees);
}
try {
sleep(10000);
} catch (InterruptedException er) {
System.out.println("载入线程异常" + er);
}
}
}
//----------------------------------------------------------------------------------
每当循环到第二次或第三次时,就出现错误“java.net.BindException: Address already in use: connect”,出现端口被占用的现象,请问各位高手,为什么出现端口被占用,有时是在第二次,而有时是在第三次,为什么Socket占用的端口不能通过close方法或赋null被释放?
...全文
988 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
YuLimin 2006-12-18
  • 打赏
  • 举报
回复
clientSocket.close();
clientSocket = null;
千里冰封820 2006-11-08
  • 打赏
  • 举报
回复
一般来说,调用 close以后,该端口应该就已经被关闭了

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧