gpt4 book ai didi

Java - TCP套接字仅在LAN中连接

转载 作者:行者123 更新时间:2023-12-01 11:25:37 25 4
gpt4 key购买 nike

我创建了一个小型 TCP 服务器,但它仅连接到 LAN 上的其他计算机。我确实转发了端口,但仍然无法正常工作。

连接方式:

    private boolean connect(){
try {
socket = new Socket(InetAddress.getByName(ip), port);
System.out.println("socket created");
dataOutput = new DataOutputStream(socket.getOutputStream());
dataInput = new DataInputStream(socket.getInputStream());
accepted = true;
} catch (IOException e) {
System.out.println("Unable to connect to the server");
return false;
}
System.out.println("Successfully connected to the server.");
return true;
}

监听方法:

    private void listenForServerRequest(){
Socket socket = null;
try{
socket = serverSocket.accept();
dataOutput = new DataOutputStream(socket.getOutputStream());
dataInput = new DataInputStream(socket.getInputStream());
accepted = true;
System.out.println("client joined");

}catch(IOException e){
e.printStackTrace();
}
}

打开服务器:

    private void initializeServer(){
try{
serverSocket = new ServerSocket(port,8,InetAddress.getByName(ip));
}
catch(Exception e){
e.printStackTrace();
}
}

最佳答案

看起来就像您向 InetAddress.getByName() 提供 IP 地址一样。它需要一个主机名。具体来说,它需要与端口转发到的网络对应的主机名。例如,如果您要转发到计算机的(内部)IP 地址(例如 192.168.1.10),则它需要与该地址对应的主机名(例如 mycomputer.10)。本地)。 Java 需要该主机名才能知道它应该监听哪个接口(interface)。我很惊讶它竟然有效。

如果您确实想提供 IP 地址而不是主机名,请改用 InetAddress.getByAddress(byte[] addr):

byte[] addr = new byte[4];
addr[0] = 192;
addr[1] = 168;
addr[2] = 1;
addr[3] = 10;
...
serverSocket = new ServerSocket(port,8,InetAddress.getByAddress(addr));

关于Java - TCP套接字仅在LAN中连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30826241/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com