Java套接字无法通过LAN工作?

时间:2016-03-28 21:53:05

标签: java sockets networking

我试图为我创建的游戏添加多人游戏功能。我已经在套接字上阅读了Java tutorial,但发现自己仍然无法实现我想要的功能。在similar post中,另一位用户似乎遇到了与我相同的问题。

就我而言......

  • 我正在运行直接在Java教程上提供的两个程序。
  • 当我在同一台计算机上运行它们时,它们可以完美地工作。
  • 当我在我的OSX机器上运行服务器程序(使用root)和W7机器上的客户端程序时,我不断获得IOExceptions - 即使在同一个端口上,客户端机器也无法访问服务器机器(我使用了9355都)。
  • 当我在我的W7机器上运行服务器程序和在我的OSX机器上运行客户端程序(使用root)时,我仍然可以获得IOExceptions。

一些其他信息......

  • 在服务器程序中运行System.out.println(serverSocket.getInetAddress());会在两台计算机上返回0.0.0.0/0.0.0.0

  System.err.println("Couldn't get I/O for the connection to " + hostName);
  e.printStackTrace();
  System.out.println(e.getMessage());
  System.out.println(e.getLocalizedMessage());

我得到了

Couldn't get I/O for the connection to 192.168.0.37
Operation timed out
java.net.ConnectException: Operation timed out
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339)
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200)
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
    at java.net.Socket.connect(Socket.java:579)
    at java.net.Socket.connect(Socket.java:528)
    at java.net.Socket.<init>(Socket.java:425)
    at java.net.Socket.<init>(Socket.java:208)
    at Main.MainClass.main(MainClass.java:17)
Operation timed out

为什么我需要在客户端或服务器上禁用防火墙? Hasn的Java是否为传入数据打开了套接字?如果教程尚未成功,为什么教程会如此简单?

1 个答案:

答案 0 :(得分:2)

ConnectException: operation timed out

表示主机已关闭或防火墙问题。

  

为什么我需要禁用防火墙

因为它阻止了入站连接。您无需完全禁用它:您需要在服务器防火墙中打开正在侦听的端口。

  

Java没有打开套接字

是的,这就是你得到0.0.0.0的方式:它是ServerSocket的收听地址。