我是大学的研究员,我正在尝试一些业余的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和它们所在的网关,但我仍然无法得到它们互相交谈。
任何想法。
谢谢!
答案 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)我应该对刚刚出现的愤怒的网络管理员说些什么?
“我不是端口和网络扫描!诚实!”寻找可用端口是一项基本的黑客操作。一些工作场所有自动工具来检查它,并将其视为不合适。