4 java sockets performance multiplayer
您好我正在制作Java多人游戏,一切正常.它有所有人需要,但我发现了一个问题,它使用ServerSocket服务器,Socket为客户端,工作正常,但最大的问题是它不能在全球范围内工作.只有局域网,我甚至尝试过Hamachi,但这也没有用.
你有什么想法会有用吗?
更多信息:我在服务器中使用特定线程来接受,发送和接收套接字以及客户端中用于发送和接收的特定线程.它发送一个我制作的对象并包含所有信息.
ip = InetAddress.getLocalHost().getHostAddress() + ":" + port;
server = new ServerSocket();
//This asks you if you want to use a specific IP or just the one that we got in first line
String socketaddress;
socketaddress = (String) JOptionPane.showInputDialog(null, "IP: ", "Info",JOptionPane.INFORMATION_MESSAGE,null,null,InetAddress.getLocalHost().getHostAddress());
server.bind(new InetSocketAddress(socketaddress, port));
//Here it starts the accept thread, and then it starts send and receive threads
new Thread(accept).start();
Run Code Online (Sandbox Code Playgroud)
以下是我发现最重要的客户端内容:
socket = new Socket(ip,port);
String set_username = System.getProperty("user.name");
set_username = (String) JOptionPane.showInputDialog(null, "Username: ", "Info", JOptionPane.INFORMATION_MESSAGE,null,null,set_username);
username = set_username;
//It sends the username to server
ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());
oos.writeObject(username);
//Then server responds with a message
ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
String response = (String) ois.readObject();
//This writes the server' message
JOptionPane.showMessageDialog(null, response, "Message",JOptionPane.INFORMATION_MESSAGE);
Run Code Online (Sandbox Code Playgroud)
另外我还有另外一个问题,从1个客户端到另一个客户端需要3到4秒的套接字,它应该几乎是即时的,因为它在同一个网络上并且我有一个快速的互联网.
编辑:我尝试在客户端的同一台PC上创建服务器,然后在使用我的全球IP加入时,它不起作用:(
编辑:它的工作即便如此我现在所做的一切都是在防火墙中添加港口,谢谢你们这么多的人:D.现在我可以和我的朋友一起玩:3
当您连接到Internet上的Java Web服务器时,它将使用ServerSocket和Socket.这很好用.
可能不起作用的是Internet上的用户无法连接到您,因为您位于防火墙或路由器/ NAT之后(与Java无关).在互联网上的用户可以通过IP地址远程登录到您机器上的端口之前,使用Java不会使这项工作有任何不同.
顺便说一句:你应该在创建ObjectInputStream之前创建你的ObjectOutputStream AND flush(),否则另一端的ObjectInputStream可以永久阻塞.
您需要阅读防火墙(控制从LAN外部连接到机器的内容),端口转发(可以将公共IP地址转发到内部IP地址)以及一般的IP寻址(这会给你一些有关IP地址如何工作,什么是公共/私有以及数据如何通过网络传输的信息.
从那里,它是,如果真的很有帮助,在未来的问题,你会发布哪些IP地址你连接从和到(公共或其他),有什么错误消息出现(不只是代码),和你"已经尝试过但失败了.stackoverflow上的Q/A并不是故障排除会话 - 我们确实需要特定的错误消息,如何配置端口转发,防火墙到底等等,以及您尝试过的事情.目前,鉴于您发布的代码,全球范围内存在许多潜在问题(尽管代码可能实际上不是问题 - 它可能更多是配置问题).
我基本上是这样说,虽然这是一个非常广泛的答案,但你的问题也非常宽泛,并没有明确的问题.
| 归档时间: |
|
| 查看次数: |
10605 次 |
| 最近记录: |