Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法在不同网络的套接字上连接_Java_Sockets - Fatal编程技术网

Java 无法在不同网络的套接字上连接

Java 无法在不同网络的套接字上连接,java,sockets,Java,Sockets,我无法通过另一个网络将我的在线应用程序连接到其他应用程序。当我们在同一个网络上时,我可以给他们提供要连接的主机地址,但当我们在互联网上进行连接时,生成的主机地址不允许连接,也不允许使用从whatismyip.com等在线网站获得的ip地址 我最大的问题不是调试这段代码,因为它在网络内部工作,但当我们尝试移动到不同的网络时,服务器看不到尝试。另外,我使用的测试端口是2222 InetAddress addr = InetAddress.getLocalHost(); String hostname

我无法通过另一个网络将我的在线应用程序连接到其他应用程序。当我们在同一个网络上时,我可以给他们提供要连接的主机地址,但当我们在互联网上进行连接时,生成的主机地址不允许连接,也不允许使用从whatismyip.com等在线网站获得的ip地址

我最大的问题不是调试这段代码,因为它在网络内部工作,但当我们尝试移动到不同的网络时,服务器看不到尝试。另外,我使用的测试端口是2222

InetAddress addr = InetAddress.getLocalHost();
String hostname = addr.getHostName();
System.out.println("Hostname: " + hostname);
System.out.println("IP: " + addr.getHostAddress());
我在服务器启动时向其显示主机

if (isClient) {
System.out.println("Client Starting..");
clientSocket = new Socket(host, port_number); 
} else {
System.out.println("Server Starting..");
echoServer = new ServerSocket(port_number);
clientSocket = echoServer.accept();
System.out.println("Warning, Incoming Game..");
}

如果它在您的本地lan上工作,但不在internet上工作,则一个或两个对等点可能位于,这意味着您在internet上看到的公共IP地址与您试图与之通信的机器的IP地址不同。您可能需要设置某种类型的连接以允许应用程序连接。

一些其他信息可能会有所帮助。你能从你现在的地方把机器打开吗?您正在尝试通过防火墙吗?你说它们在本地主机或本地网络上工作-这有点不同。您是指使用本地空间的网络(即10…*或192.168..等)?您说您正在使用2222的测试ip—这不是ip地址。那是地址的域吗?或者这是端口号?

问题可能是防火墙配置

假设你在家测试这个(通常在大学或公司测试会更复杂)

通常,您需要将路由器配置为允许端口2222打开(您也可以打开端口5555,并告诉路由器重定向到lan上所需的主机(可能有很多)和端口2222)

总而言之: 其他用户---->internet---->[您的调制解调器]internet\u IP->[您的路由器]lan\u IP->您的计算机lan\u IP2

internet_IP由您的ISP提供;在这里找到它: lan_IP:您在路由器配置中定义了。典型值:192.168.0.1 lan_IP2:通常由路由器(DHCP)提供给您的PC。通过键入ipconfig(Windows)或ifconfig(Linux)找到它

您需要告诉您的路由器打开端口2222,并将其路由到端口2222上的lan_IP2。
配置路由器通常通过连接其http接口来完成:

您看到的IP地址是什么?2222不是IP地址。测试有结果吗?问题解决了吗。请务必告诉解决方案或任何需要调查的资源。我也有同样的问题。既然你提到了,我想我的大学网络会用它来屏蔽ip地址。我会在接下来的几个小时内做一些独立的确认。我想知道如何解决这个问题。两台机器都在Uni网络上还是只有一台?您只需在机器的其中一个端口上设置端口转发即可正常工作。另一个解决方案是使用开放互联网上的第三台机器作为代理。当测试时,只有一台机器被激活。我将测试主机是否不在大学网络上。如果服务器直接连接到internet,即它的公共IP是唯一的IP,那么客户端是否被NAT’s不重要。但是,它不会反过来工作。嘿,我也有同样的问题。你能推荐一些资源吗?在那里我可以通过例子得到很好的解释。我对套接字编程不太熟悉。不过要小心,如果你在internet上打开了一个端口。。。即使看起来像虚拟服务器的东西有时也会被黑客利用。