簡體   English   中英

Java 套接字不能通過 LAN 工作?

[英]Java Sockets Not Working Over LAN?

我正在嘗試為我創建的游戲添加多人游戲功能。 我已經閱讀了有關套接字的 Java教程,但發現自己仍然無法實現我想要的功能。 類似的帖子中,另一位用戶似乎遇到了與我完全相同的問題。

就我而言...

  • 我正在運行 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

為什么我可能需要禁用客戶端或服務器計算機上的防火牆? Java 沒有為傳入數據打開套接字嗎? 如果教程還沒有運行,為什么它會變得如此簡單?

ConnectException: operation timed out

這表明主機已關閉或防火牆問題。

為什么我可能需要禁用防火牆

因為它阻塞了入站連接。 您不需要完全禁用它:您需要在服務器防火牆中打開您正在偵聽的端口。

Java沒有打開套接字嗎

是的,這就是您獲得 0.0.0.0 的方式:它是該ServerSocket的偵聽地址。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM