java打开客户端程序_Java客户端服务器应用程序 - 已在使用的地址:connect

我目前正在开发一个简单的多人游戏,其中有几个客户需要连接到服务器 .

我的服务器由一个serverSocket组成 . 此serverSocket接受传入连接并将其交给启动单独线程的连接对象 .

ServerSocket seso = new ServerSocket(12345);

while(true){

Socket toClient = seso.accept();

new Connection(toClient); //creates a thread that opens streams etc

}

客户端打开一个新的Socket并连接到此服务器 .

Socket toServer = new Socket();

toServer.setReuseAddress(true);

toServer.bind(new InetSocketAddress(65432)); //always using the same port

toServer.connect(new InetSocketAddress(serverIP,12345));

现在如果我使用 toServer.close(); 关闭与服务器的连接并尝试再次连接到服务器,我会收到"address already in use: connect"异常 .

使用TCPView我可以看到客户端procress的状态更改为TIME_WAIT . 但是,由于 setReuseAddress(true) ,我不应该再次使用此端口吗?我使用它错了还是服务器问题?

我总是在toClient和toServer上调用.close() . 然而,我总是要等到套接字完全关闭(在TIME_WAIT之后),然后该客户端才能再次连接到服务器 .

当我关闭整个应用程序时,套接字立即关闭(不在状态TIME_WAIT),此客户端可以连接到我的服务器 . (并且我的服务器中存在连接重置异常)

如果不关闭应用程序,我怎么能这样做?

谢谢你的帮助 .

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值