我正在尝试创建一个多人Java游戏,并决定使用Java套接字服务器。当它们都在我的计算机上运行时,“客户端”能够完美地连接并与服务器通信,但是当我将客户端文件发送到另一台计算机(连接到同一网络)时,它就无法连接到服务器,我不知道为什么。我运行了cmd并使用了netstat -a代码,并能够确认服务器正在侦听127.0.0.1:3251,所以我认为问题出在客户端。
这是创建服务器的方式:
try {
this.serverSocket = new ServerSocket();
this.serverSocket.bind(new InetSocketAddress("localhost",port)); //port is 3251
window.show("SERVER: " + "Created On Port: " + port);
} catch (IOException e) {
window.show("SERVER: " + e.getMessage());
window.show("SERVER: " + "Unable To Create Server :(");
}
这是客户端连接的方式:
try {
socket = new Socket("localhost", 3251);
} catch (IOException e) {
e.printStackTrace();
}
服务器接受连接后,它将创建一个新线程:
Socket socket = this.serverSocket.accept();
ServerThread serverThread = new ServerThread(socket);
serverThread.start();
答案 0 :(得分:2)
try {
socket = new Socket("localhost", 3251);
} catch (IOException e) {
e.printStackTrace();
}
“ localhost”表示您的客户端计算机正在同一台计算机上寻找服务器。这应该是服务器IP,即192.168.0.2或其他名称。
答案 1 :(得分:2)
您有两个问题:
this.serverSocket.bind(new
InetSocketAddress("localhost",port));
。这将创建一个服务器
localhost
解析到的IP地址上的套接字。这可能是个问题。在大多数主机上
localhost
将解析为127.0.0.1
个环回地址,您的
服务器套接字只会监听。能够听所有
该计算机上的NIC将new InetSocketAddress(port)
see the java doc用于此构造。或发现并使用服务器的特定主机名。 localhost
上的服务器。您需要一种配置客户端的方法,以便它知道服务器在哪里并使用它。要进一步阐明这一点:
socket是用于通信的IP:端口。假设主机有两个网卡,其IP为192.168.2.1和10.0.0.2。现在,如果您将服务器套接字(例如8000)绑定到192.168.2.1
IP。只有使用此组合192.168.2.1:8000
才能访问此端口,类似地,如果将其绑定到10.0.0.2
IP,则只能通过该IP对其进行访问。而且,如果您绑定本地主机(又名Loopback address),则该主机上的客户端只能访问它。如果要运行仅限于该主机上的客户端的服务器,这将很有用。