Ping网络上的计算机

时间:2011-04-07 15:17:46

标签: java sockets ip

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

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

http://download.oracle.com/javase/tutorial/networking/sockets/clientServer.html

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

当我使用在同一台机器上运行的服务器和客户端以及机器名称为“localhost”

时,这可以正常工作
kkSocket = new Socket("localhost", 4444);

当我在家庭网络上使用InetAddress时,它也适用于家庭:

InetAddress myaddress = InetAddress.getByName("129.11.138.64");
kkSocket = new Socket(myaddress, 4444);

然而,当我尝试在大学机器上做同样的事情时它不起作用,因为它们落后于某种代理,尽管两台机器彼此相邻并插入相邻的以太网端口。

问题:

当我无法完全控制他们所在的网络时,如何确定如何让两台机器互相通话?我甚至无法弄清楚如何让他们互相ping。我已经访问了“www.whatismyip.com”来获取每台机器的外部ip,但这不起作用,我看了下一个工作适配器ip和它们所在的网关,但我仍然无法得到它们互相交谈。

任何想法。

谢谢!

4 个答案:

答案 0 :(得分:2)

听起来我的网络阻止了端口4444上的流量。请尝试使用其他端口,或确认允许端口4444。

答案 1 :(得分:1)

即使我不能在工作场所ping两台机器。

您需要更改网络偏好设置或尝试以下操作:
(IE的说明) 转到工具 - >互联网选项 - >局域网设置 - >先进的。
在字段中添加例外:“不要将代理服务器用于以下开头的地址:”
输入网络ip起始号码,例如,如果你的网络有ip加10开始。 - 。 - .--在现场写10. *。

答案 2 :(得分:1)

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

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

即使您可以“猜测”该信息,路由器/ NAT也可能不允许您在其后面使用此转换(即在LAN上)。

总结一下,请确保使用分配给您设备的正确私有IP地址,并确保没有路由器或防火墙阻止通过所考虑端口的流量。

答案 3 :(得分:1)

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

1)两台机器可以相互连接吗?

您可以使用Windows和* nix中提供的“ping”命令从命令行对此进行测试。 Ping测试是否存在与指定机器的连接的可靠性。

2)可以过滤路线吗?

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

3)Java防火墙吗?

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

4)端口是否被阻止?

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

5)你如何用Java做到这一点?

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

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

“我不是端口和网络扫描!诚实!”寻找可用端口是一项基本的黑客操作。一些工作场所有自动工具来检查它,并将其视为不合适。