我正在开发一个我正在上课的游戏,它完成了大约99% . 但是,我意识到存在一个问题:如果服务器和客户端断开连接,并且客户端尝试重新连接(并且服务器已备份且运行正常),则客户端不会 Build 新连接 .
服务器和客户端都是多线程的 . 如果我向客户端发送 Kick
消息,那么客户端将关闭其套接字 . 如果我重新连接,我得到一个 SocketException
:socket关闭,即使每次按下连接时,都会构造一个新的Client,它基本上只是一个创建套接字并使用get / send线程连接到服务器的类 .
你觉得我有什么不合逻辑吗?它就像它试图使用构造的旧Socket和Client,但是如果我做了一些 println
调用,我可以看到它确实构造了一个新的并且它们位于不同的内存位置 .
谢谢!
2 回答
关闭套接字后,您无法重用它来在服务器和客户端类之间共享其他数据 . 从Java Socket API开始,关于
close()
方法的描述:然后, it isn't possible to close a socket and reopen it . 我认为,这就是抛出异常的原因 .
这很容易!我做了这个程序(服务器端):
客户端:
它工作,因为你可以使用相同的ServerSocket声明大量的套接字,所以例如这也适用:
并且你有3个套接字......请记住:当你声明一个Socket时,java等待客户端连接!码:
客户:
服务器: