这个问题似乎是一个很明显的问题,但我花了一个多小时试图找到答案。
首先,我主持并等待有人连接。然后,从应用程序的另一个实例,我尝试与套接字连接 - 对于构造函数,我使用 InetAddress、端口。端口总是正确的,如果我使用“localhost”作为地址,一切都会正常。但是,如果我输入我的 IP(我通过 Google 搜索“我的 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 port 和 String ip 的值取自文本字段。
编辑:我的应用程序的目的是连接两台非本地计算机。
最佳答案
正如 Greg Hewgill 所提到的,如果您位于 NAT 设备(路由器等)后面,您将必须执行一些端口转发。
基本上,您从谷歌使用“我的IP是什么”获得的公共(public)IP地址就是您的公共(public)IP地址,但由于您使用的是连接有多台计算机的路由器,因此有一个映射多台计算机的协议(protocol)到一个称为 NAT 的公共(public)地址。
您需要做的是告诉您的路由器将特定端口上的传入数据包转发到特定计算机。
本文强调了执行此操作的方法 http://www.wikihow.com/Port-Forward
关于java - 使用套接字远程连接两台非本地计算机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12450736/