2

这个问题似乎很明显要问,但我花了一个多小时试图找到答案。

首先,我主持并等待有人连接。然后,从应用程序的另一个实例中,我尝试使用套接字连接 - 对于构造函数,我使用 InetAddress、端口。端口总是正确的,如果我使用“localhost”作为地址,一切正常。但是,如果我输入我的 IP(我从谷歌搜索“我的 ip 是什么”得到的那个),我会得到一个 IOException。我什至把申请发给了别人,把我的IP给了他,但没有用。

该应用程序的目的是连接两台计算机。它是在 Java 中的。这是相关的代码。

服务器:

ServerSocket serverSocket = new ServerSocket(port);
Socket clientSocket = serverSocket.accept();

客户:

InetAddress a = InetAddress.getByName(ip);
Socket s = new Socket(a, port);

我过不去。显然,int portString ip的值取自文本字段。

编辑:我的应用程序的目的是连接两台非本地计算机。

4

1 回答 1

2

正如 Greg Hewgill 所提到的,如果您在 NAT 设备(路由器等)后面,您将不得不进行一些端口转发。

基本上,您从谷歌使用“我的 IP 是什么”获得的公共 IP 地址是您的公共 IP 地址,但是由于您使用的路由器连接了多台计算机,因此有一个协议可以将多台计算机映射到单个公共地址称为 NAT。

您需要做的是告诉您的路由器将某个端口上的传入数据包转发到某台计算机。

本文重点介绍了执行此操作的方法http://www.wikihow.com/Port-Forward

于 2012-09-16T21:33:36.000 回答