如何为多个客户端编写java TCP对象传输
我只使用Java标准库编写了一个原始的、图形化的、类似于MUD的在线游戏——just Swing和TCP套接字(用于学校和娱乐)。游戏有一个服务器(我衣柜里的一台备用笔记本电脑),它接受玩家的TCP连接,接收对象(使用ObjectInputStream)——聊天字符串和丢弃的项目等等——并使用这些对象对虚拟世界进行更改,然后转发给其他玩家 最初,我认为我可以通过让我的服务器的主线程使用循环侦听每个播放器的连接,让每个播放器连接到我服务器上的同一TCP端口(端口5010),就像这样如何为多个客户端编写java TCP对象传输,java,multithreading,sockets,tcp,Java,Multithreading,Sockets,Tcp,我只使用Java标准库编写了一个原始的、图形化的、类似于MUD的在线游戏——just Swing和TCP套接字(用于学校和娱乐)。游戏有一个服务器(我衣柜里的一台备用笔记本电脑),它接受玩家的TCP连接,接收对象(使用ObjectInputStream)——聊天字符串和丢弃的项目等等——并使用这些对象对虚拟世界进行更改,然后转发给其他玩家 最初,我认为我可以通过让我的服务器的主线程使用循环侦听每个播放器的连接,让每个播放器连接到我服务器上的同一TCP端口(端口5010),就像这样 while (
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上)时,我无法通过IOException,例如绑定异常和“java.net.SocketException:socket closed”
显然,我这样做的方式不起作用,也许我需要为每个播放器分配一个唯一的端口号,而不是让每个播放器都尝试连接到端口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();
我不会告诉你你将要面对的其他问题,但这至少会让你走起来。试试这个
serversocket = new ServerSocket(5010);
while (true)
{
socket = serversocket.accept();
//proceed to log in player using their computer's host name.
}
serversocket.close();
我不会告诉你你将要面对的其他问题,但这至少会让你走起来。试试这个
serversocket = new ServerSocket(5010);
while (true)
{
socket = serversocket.accept();
//proceed to log in player using their computer's host name.
}
serversocket.close();
我不会告诉你你将要面对的其他问题,但这至少会让你走起来。试试这个
serversocket = new ServerSocket(5010);
while (true)
{
socket = serversocket.accept();
//proceed to log in player using their computer's host name.
}
serversocket.close();
我不会向您展示您将要面对的其他问题,但这至少会让您继续。打开插座后,您将直接关闭插座。这是你的第一个问题。你有没有试过oracle网络教程?是的,但它更多的是略读而不是全面阅读。除了一些小的技术细节,我很好奇总体设计中是否有任何大的漏洞。例如,如果TCP是一个糟糕的设计选择,用于同时向多个不同的播放器发送数据-也许我应该改用UDP Multisocket。或者,UDP可能是一个糟糕的选择,因为单向UDP信号不太可能通过无线调制解调器、防火墙和TCP信号。这些都是可以预见的大问题,你打开插座后就直接关上了。这是你的第一个问题。你有没有试过oracle网络教程?是的,但它更多的是略读而不是全面阅读。除了一些小的技术细节,我很好奇总体设计中是否有任何大的漏洞。例如,如果TCP是一个糟糕的设计选择,用于同时向多个不同的播放器发送数据-也许我应该改用UDP Multisocket。或者,UDP可能是一个糟糕的选择,因为单向UDP信号不太可能通过无线调制解调器、防火墙和TCP信号。这些都是可以预见的大问题,你打开插座后就直接关上了。这是你的第一个问题。你有没有试过oracle网络教程?是的,但它更多的是略读而不是全面阅读。除了一些小的技术细节,我很好奇总体设计中是否有任何大的漏洞。例如,如果TCP是一个糟糕的设计选择,用于同时向多个不同的播放器发送数据-也许我应该改用UDP Multisocket。或者,UDP可能是一个糟糕的选择,因为单向UDP信号不太可能通过无线调制解调器、防火墙和TCP信号。这些都是可以预见的大问题,你打开插座后就直接关上了。这是你的第一个问题。你有没有试过oracle网络教程?是的,但它更多的是略读而不是全面阅读。除了一些小的技术细节,我很好奇总体设计中是否有任何大的漏洞。例如,如果TCP是一个糟糕的设计选择,用于同时向多个不同的播放器发送数据-也许我应该改用UDP Multisocket。或者,UDP可能是一个糟糕的选择,因为单向UDP信号不太可能通过无线调制解调器、防火墙和TCP信号。这些都是可以预见的大问题。但我读到ServerSocket只用于建立连接。服务器套接字始终保持打开状态。它正在监听连接。客户端可以连接到侦听套接字。服务器无法连接到客户端套接字。这就是TCP的工作原理。哦,我明白了。ServerSocket对象不只是创建一个连接,然后在每次需要新连接时被一个新连接替换。欢迎来到兔子洞。是的,你是对的。如果您需要答案,请再发一些。但我听说ServerSocket仅用于建立连接。服务器套接字始终保持打开状态。它正在监听连接。客户端可以连接到侦听套接字。服务器无法连接到客户端套接字。这就是TCP的工作原理。哦,我明白了。ServerSocket对象不只是创建一个连接,然后被一个新的连接替换