【发布时间】:2015-03-20 13:18:55
【问题描述】:
我正在尝试分别在两个单独的 LAN 网络上的两台计算机之间建立套接字连接。所以这就是我的两台计算机的设置方式。我的 MacBook 位于路由器 IP 为 121.245.152.106 的网络上。我的戴尔 PC 位于路由器 IP 为 27.4.193.156 的网络上。
我使用我的 MacBook 作为我的服务器。此代码将只接受来自客户端(戴尔 PC)的套接字连接,并将打印它的 IP 地址。这段代码出现在我的 MacBook 上:
LolServer.java:
import java.io.*;
import java.net.*;
public class LolServer {
public static void main(String[] args) throws IOException {
ServerSocket server = new ServerSocket(8080); // ServerSocket listening to port 8080
Socket socket = server.accept();
System.out.println(socket.getInetAddress().getHostAddress()); // Printing the client IP address.
socket.close();
server.close();
}
}
当我
telnet 192.168.1.102 8080
// or
telnet 127.0.0.1 8080
在我的本地机器(MacBook)上,代码工作正常,LolServer 程序打印
192.168.1.102
// or
127.0.0.1
分别作为其输出。这里,192.168.1.102 是路由器提供的我的 MacBook 的本地/私有 IP 地址,IP 为 121.245.152.106。
现在问题就在这里。当我尝试从远程网络(即我的戴尔 PC)访问该程序时,telnet 命令一直在搜索服务器并且不打印任何输出。
这是我从客户端尝试的:
telnet 121.245.152.106 8080
这没有输出。它甚至不会在我的 Macbook 上打印任何输出。我想我的插座甚至没有连接。 121.245.152.106 是用于连接我的戴尔 PC 的 IP 吗?这样做没有意义:
telnet 192.168.1.102 8080
192.168.1.102 是私有 IP 地址。
请帮助我,我真的需要让这个工作。提前致谢。
【问题讨论】:
-
我不会假装我在这里知道太多,但也许你需要转发?你的代码似乎没有问题,所以我最好的猜测是需要防火墙/端口转发。
-
您需要提供实时 IP。并且还需要转发
-
是的。 IP是活的。我将如何进行端口转发?我还是个学生。
-
你需要在你的路由器中配置这个东西
-
查找 NAT/DNAT。您需要在路由器上将端口 8080 从 WAN 端(公共 IP)转发到 LAN 端(192.168.x.x)
标签: java sockets networking