我阅读和观看的所有关于 java 套接字编程的教程都涉及一个常见的基本词,即 localhost。我玩 java 服务器客户端程序有一段时间了,做了一些实验。但每次,我的计算机既是服务器又是客户端,所以当其他计算机尝试连接到我计算机上托管的服务器时,我不太明白如何让事情正常进行。
以下面的基本服务器-客户端类为例:
服务器级
public class TestServerSocket {
public static void main(String args[]) throws IOException {
final int portNumber = 444;
System.out.println("Creating server socket on port " + portNumber);
ServerSocket serverSocket = new ServerSocket(portNumber);
while (true) {
Socket socket = serverSocket.accept();
OutputStream os = socket.getOutputStream();
PrintWriter pw = new PrintWriter(os, true);
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
//...code...
}
socket.close();
pw.close();
os.close();
br.close();
}
}
客户端类
public class TestClientSocket {
public static void main(String args[]) throws IOException {
final String host = "localhost";
final int portNumber = 444;
System.out.println("Creating socket to '" + host + "' on port " + portNumber);
while (true) {
Socket socket = new Socket(host, portNumber);
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
BufferedReader userInputBR = new BufferedReader(new InputStreamReader(System.in));
//...code...
}
socket.close();
out.close();
br.close();
userInputBR.close();
}
}
现在,假设我想在我的计算机上运行 TestServerSocket,让我的 friend 在他的计算机上运行 TestClientSocket。必须对此代码进行哪些更改才能使其正常工作?
最佳答案
“localhost”本质上是您的环回 IP 地址 127.0.0.1 的别名
为了让您的 friend 连接到您的服务器,代码必须用您服务器的 IP 地址代替“localhost”。
需要注意的重要一点,如果您的 friend 不在您的本地网络上,您将不得不使用您的出站 IP 地址和端口转发路由器上的正确端口。不过,如果您不熟悉这种类型的网络,我不会尝试。如果您不小心,即使您很小心,也可能会遭受无数基于网络的攻击。</p>
关于Java——套接字编程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43790698/