Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.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 在网络上ping计算机_Java_Sockets_Ip - Fatal编程技术网

Java 在网络上ping计算机

Java 在网络上ping计算机,java,sockets,ip,Java,Sockets,Ip,我是一名大学的研究员,我正在尝试业余的java2编程 我一直在学习KnockServer/Client Java2教程,使用Java套接字将字符串从一个程序发送到另一个程序 完整的源代码可以在那里下载,并且编译得很好,这是一个使用IP让两个程序在Java中相互通信的好例子 当我使用在同一台机器上运行的服务器和客户机,并且机器名为“localhost”时,这种方法可以很好地工作 当我在我的家庭网络上使用它时,它也可以在家中工作,地址为: InetAddress myaddress = InetA

我是一名大学的研究员,我正在尝试业余的java2编程

我一直在学习KnockServer/Client Java2教程,使用Java套接字将字符串从一个程序发送到另一个程序

完整的源代码可以在那里下载,并且编译得很好,这是一个使用IP让两个程序在Java中相互通信的好例子

当我使用在同一台机器上运行的服务器和客户机,并且机器名为“localhost”时,这种方法可以很好地工作

当我在我的家庭网络上使用它时,它也可以在家中工作,地址为:

InetAddress myaddress = InetAddress.getByName("129.11.138.64");
kkSocket = new Socket(myaddress, 4444);
然而,当我尝试在大学机器上做同样的事情时,它不起作用,因为它们在某种代理之后,尽管这两台机器彼此相邻并插入相邻的以太网端口

问题:

当我不能完全控制这两台机器所在的网络时,我该如何解决如何让这两台机器相互通信的问题?我甚至想不出如何让他们互相打。我访问了“www.whatismyip.com”以获取每台机器的外部ip,但这不起作用,我查看了下一个工作适配器ip和它们所在的网关,但仍然无法让它们相互通信

任何想法


谢谢

在我看来,您的网络正在阻止4444端口的通信量。请尝试其他端口,或确认端口4444是允许的。

我觉得您的网络正在阻止端口4444上的流量。请尝试其他端口,或确认端口4444是允许的。

即使我无法在工作场所ping两台机器

您需要更改网络首选项或尝试以下操作:
(IE说明) 转到工具->互联网选项->局域网设置->高级。
将例外情况添加到字段:“不要将代理服务器用于以:”

输入网络ip起始编号,例如,如果您的网络具有以10.-.-.-开头的ip加法,则在字段中写入10..

即使我无法在工作场所ping两台机器

您需要更改网络首选项或尝试以下操作:
(IE说明) 转到工具->互联网选项->局域网设置->高级。
将例外情况添加到字段:“不要将代理服务器用于以:”

输入网络ip起始编号,例如,如果您的网络具有以10.-.-.-开头的ip加法,请在字段中写入10..

您需要确保每台计算机都知道另一台计算机在LAN上的专用ip地址(请参阅ipconfig或ifconfig命令)。每次设备连接到LAN上时(几乎)都会发生变化,有时甚至在设备连接到LAN上时也会发生变化

www.whatismyip.com不会帮助您,因为它只会给您最靠近该服务器的路由器/NAT的公共IP地址。无法保证它也是离您的设备最近的设备。即使是这样,这些信息也毫无用处,因为您(通常)无法预测NAT将如何将您的私有IP地址转换为公共IP地址

即使您可以“猜测”该信息,也有可能路由器/NAT不允许您在其背后使用该翻译(即在LAN上)


总之,请确保使用分配给设备的正确专用IP地址,并确保没有路由器或防火墙阻止所考虑端口上的通信。

您需要确保每台计算机都知道另一台计算机在LAN上的专用IP地址(请参阅ipconfig或ifconfig命令)。每次设备连接到LAN上时(几乎)都会发生变化,有时甚至在设备连接到LAN上时也会发生变化

www.whatismyip.com不会帮助您,因为它只会给您最靠近该服务器的路由器/NAT的公共IP地址。无法保证它也是离您的设备最近的设备。即使是这样,这些信息也毫无用处,因为您(通常)无法预测NAT将如何将您的私有IP地址转换为公共IP地址

即使您可以“猜测”该信息,也有可能路由器/NAT不允许您在其背后使用该翻译(即在LAN上)


总而言之,请确保使用分配给设备的正确专用IP地址,并确保没有路由器或防火墙阻止所考虑端口上的通信。

此问题有几个不同的部分:

1) 这两台机器能互相连接吗

您可以使用Windows和*nix中都可用的“ping”命令从命令行测试这一点。Ping测试指定机器连接的存在性和可靠性

2) 这条路线可以被过滤吗

仅仅因为你可以ping一台机器,并不意味着它们之间没有防火墙或代理。您可以使用“tracert”命令找到两台机器之间的路线。路线上的步骤越多,可能会阻止你的信号的事情就越多

3) Java是防火墙吗

仅仅因为它已安装,并不意味着它具有开放的网络访问。尝试获取一些URL或类似的URL,看看Java是否具有网络连接

4) 港口堵塞了吗

可以通过两种方式阻止端口:其他应用程序正在使用它,或者防火墙限制侦听端口。如果是前者,Java将无法将套接字连接到端口。如果是后者,请尝试其他端口。没有什么可以阻止你同时运行10000个客户端,看看你是否可以连接到其中的任何一个

5) 在Java中如何做到这一点

Ping可以通过InetAddress.isReachable()实现

6) 我应该对刚刚出现的愤怒的网络管理员说些什么

“我不是端口和网络扫描!老实说!”寻找可用端口是一项基本的黑客操作。一些工作场所有自动工具来检查它,并且会认为它不合适InetAddress myaddress = InetAddress.getByName("129.11.138.64"); kkSocket = new Socket(myaddress, 4444);