这个问题看起来很明显,但我花了一个多小时试图找到答案。
首先我主持并等待有人连接。然后,从应用程序的另一个实例,我尝试连接一个套接字 - 对于构造函数,我使用InetAddress,port。端口总是正确的,如果我使用“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 port 和 String ip 的值取自文本字段。
编辑:我的应用程序的目的是连接两台非本地计算机。
答案 0 :(得分:1)
正如Greg Hewgill所提到的,如果你是NAT设备(路由器等)的后面,你将不得不做一些端口转发。
基本上,您使用Google的“我的IP是什么”获得的公共IP地址是您的公共IP地址,但由于您使用的是连接了多台计算机的路由器,因此有一个映射多台计算机的协议到一个名为NAT的公共地址。
您需要做的是告诉您的路由器将某个端口上的传入数据包转发到某台计算机。
强调了这样做的方法