繁体   English   中英

如何为多个客户端编写Java TCP对象传输

[英]How to write java TCP object transmission for multiple clients

我正在仅使用Java标准库(仅用于Swing和TCP套接字(用于学校和娱乐))编写类似于MUD的图形化在线游戏。 该游戏具有一台服务器(我壁橱中的一台备用笔记本电脑),该服务器接受玩家的TCP连接并接收对象(使用ObjectInputStream)(聊天字符串和放置的物品等),并使用这些对象对虚拟世界进行更改,然后转发给其他玩家。

最初,我以为我可以让每个服务器都通过循环使服务器的主线程监听每个连接,从而将每个播放器连接到服务器上的同一TCP端口(端口5010)...

while (true)
{
        //get new connection
    serversocket = new ServerSocket(5010);
    socket = serversocket.accept();
    serversocket.close();
        //proceed to log in player using their computer's host name.
} 

然后,我将每个新播放器的TCP套接字连接传递到专用于该播放器的对象输入和输出的线程,如下所示:

new_thread = new Thread(new Server_Input_Thread(main_thread_socket));

调试时,我通过从另一台笔记本电脑运行服务器端应用程序和客户端应用程序并通过“ localhost”连接来测试游戏。

但是我有问题。 在建立初始连接(也在端口5010上)之后侦听新连接(在端口5010上)时,我无法摆脱诸如绑定异常和“ java.net.SocketException:套接字关闭”之类的IOExceptions。

显然我的操作方式不起作用,也许我需要为每个播放器分配一个唯一的端口号,而不是让每个播放器都尝试连接到端口5010,或者可能是因为我将编码笔记本电脑用作客户端和服务器。

对我来说不幸的是,我不知道自己在做什么-我刚刚宣布计算机科学为我一个学期的专业。 请解释如何为这样的虚拟世界构造网络连接,并避免在客户端应用程序和服务器之间建立初始连接后立即发生的IOException,因为服务器开始再次侦听服务器上端口5010上的新连接。主线程。

尝试这个

serversocket = new ServerSocket(5010);

while (true)
{
    socket = serversocket.accept();


    //proceed to log in player using their computer's host name.
} 
serversocket.close();

我不会向您展示您将要面临的其他问题,但这至少可以帮助您前进。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM