java - 使用套接字远程连接两台非本地计算机

标签 java sockets

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

首先,我主持并等待有人连接。然后,从应用程序的另一个实例,我尝试与套接字连接 - 对于构造函数,我使用 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 portString 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/

相关文章:

java - 需要帮助添加使用 system.exit(0) 的 JButton

php - 仅在固定时间执行 PHP 脚本

linux - 判断socket上是否还有数据并丢弃

c - 从C中的IP获取MAC地址

c++ - 套接字 recv() 一次一个字节

java - java集合中的entryset vs keyset

Java FileWriter 类 - java.io.FileNotFoundException : * no such file or directory -Ubuntu

java - 支持它的 CharSequence 实现上的 indexOf

java - android 通过 Skype 使用 ACTION_SEND 共享内容(文本+图像),仅共享图像而不共享文本

sockets - Linux中AF_UNIX数据报消息的最大大小是多少?