use*_*097 7 java sockets client socketexception
我正在开发一个我正在上课的游戏,它完成了大约99%.但是,我意识到存在一个问题:如果服务器和客户端断开连接,并且客户端尝试重新连接(并且服务器已备份且运行正常),则客户端不会建立新连接.
服务器和客户端都是多线程的.如果我向客户端发送Kick消息,会发生什么是客户端将关闭其套接字.如果我重新连接,我得到一个SocketException:socket关闭,即使每次按下连接时,都会构造一个新的Client,它基本上只是一个创建套接字并使用get/send线程连接到服务器的类.
你觉得我有什么不合逻辑吗?它就像它试图使用构造的旧Socket和Client,但是如果我做了一些println调用,我可以看到它确实构造了一个新的并且它们位于不同的内存位置.
谢谢!
关闭套接字后,您无法重用它来在服务器和客户端类之间共享其他数据.从Java Socket API,关于close()方法的描述:
当前在此套接字上的I/O操作中阻塞的任何线程都将抛出SocketException.
一旦套接字关闭,它就无法用于进一步的网络连接(即无法重新连接或反弹).需要创建一个新的套接字.
关闭此套接字也将关闭套接字的InputStream和OutputStream.
如果此套接字具有关联的通道,则通道也将关闭.
然后,无法关闭套接字并重新打开它.我认为,这就是抛出异常的原因.