不同机器上的Java套接字不起作用

时间:2011-09-14 04:37:40

标签: java sockets client ip

我在网上尝试过很多例子,其中一个是这样的: http://zerioh.tripod.com/ressources/sockets.html

所有服务器 - 客户端套接字示例在使用127.0.0.1

进行测试时都能正常工作

但它永远不会EVAR在具有实际原始真实IP地址的两台不同计算机上工作(在telnet上“无法连接到主机”,在java客户端上测试时“连接超时” - 服务器程序只是等待连接)< / p>

注意:

  • 防火墙肯定已关闭
  • ipconfig的IP地址不起作用
  • 来自myipaddress.com的IP地址(完全不同于ipconfig的IP地址)无法正常工作

我错过了什么? 如果我只能想出来......

2 个答案:

答案 0 :(得分:0)

尝试绑定0.0.0.0。这告诉您的套接字接受本地可以接受的每个IP上的连接。

答案 1 :(得分:0)

基于评论,其中提到了以下代码片段:

requestSocket = new Socket("10.0.0.5", 2004); // ip from ipconfig 

最好在构造函数中使用主机名而不是IP地址,因为two-parameter Socket constructor with a String argument期望主机名为String,而不是IP地址。然后在提供的主机名上执行IP地址查找。

如果您需要传入IP地址,请使用接受InetAddress作为参数的two-parameter constructor。然后,您可以为InetAddress.getByAddress方法提供原始IP地址,如以下代码段所示:

InetAddress addr = InetAddress.getByAddress(new byte[]{10,0,0,5});

在通过字节数组指定参数时需要小心,因为字节是用Java(-127到+128)签名的,并且可能必须指定超出此范围的数字(但是IP地址的有效八位字节)使用Integer.byteValue

最后,应该注意的是,指定远程机器的IP地址是很重要的,这对客户端是可见的。 myipaddress.com上列出的IP地址可能是代理的地址,因为这是整个网络的公共IP,对于myipaddress.com上的主机服务器是可见的。因此,您应该指定机器可见的远程机器的IP地址,而不是myipaddress.com。