【问题标题】:Java Server and Client work local but not over ipJava 服务器和客户端在本地工作,但不通过 ip
【发布时间】:2015-03-10 13:37:47
【问题描述】:

我编写了一个简单的 Java 服务器-客户端程序。当我在 Socket 的构造函数中使用“localhost”作为地址时它工作得很好,但是当我指定我的实际 IP 时它会失败。因此,我认为问题不在于 Java 代码。 我已经转发了路由器上的端口(来自德国电信提供商 Telekom 的 Speedport w921v)。在 Windows 7 上,我已经关闭了所有防火墙。我在 Ubuntu 14 上也试过。我使用的是正确的 ip,而不是像 127. 或 192.. 这样的本地 ip。在输入 sudo netstat -tulpe 时,我发现这条记录可能属于我的程序

tcp        0      0 *:10300                 *:*                     LISTEN      

10300 是我用server = new ServerSocket(10300); 为服务器提供的端口

当我尝试通过telnet xx.xxx.xx.xxx 10300 与端口通信时,我无法得到任何响应,但如果我输入telnet localhost 10300 我会得到答案。

我真的不知道为什么会出现这个问题。

抱歉英语不好;)

【问题讨论】:

  • 如果您的路由器有问题,您可能是 PowerUser 或 ServerFault。我见过只对来自互联网的连接执行重定向的路由器,而不是从本地网络使用到外部地址的连接。您可以请朋友检查他是否能够从外部连接。您在路由器上配置的屏幕截图可能会有所帮助。

标签: java ip client-server localhost portforwarding


【解决方案1】:

ServerSocket() 构造函数和bind() 用于您希望使用的特定IP 和端口。即使您没有指定实际地址,您的计算机也可能是多线程的,并且您的 Java 服务器程序可能只侦听特定的网络地址。

【讨论】:

  • 我用以下几行试过这个:'server = new ServerSocket(); server.bind(new InetSocketAddress(ip, port));'但 JVM 抛出此异常:java.net.BindException: 无法分配请求的地址
  • 您使用的ip 是您本地机器上的IP?您可以使用 Linux/Mac 上的ifconfig -a 命令或 Windows 上的ipconfig 命令进行检查。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-29
  • 1970-01-01
  • 2014-04-25
  • 2011-01-19
  • 2017-06-23
  • 2013-05-27
相关资源
最近更新 更多