您好,我正在制作 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();
以下是我认为最重要的客户资料:
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);
另外我还有另一个问题,套接字从一个客户端到另一个客户端需要 3 或 4 秒,它应该几乎是即时的,因为它在同一个网络上,而且我有一个快速的互联网。
编辑:我尝试使用客户端在同一台电脑上创建服务器,然后在使用我的全球 IP 加入时,它不起作用:(
编辑:它的工作我很高兴现在我所要做的就是在防火墙中添加端口,非常感谢你们:D。现在我可以和我的朋友一起玩了:3