【问题标题】:Java : cannot connect to other computer through ad-hoc when using socketJava:使用套接字时无法通过 ad-hoc 连接到其他计算机
【发布时间】:2012-09-30 15:04:46
【问题描述】:

我创建了一个简单的游戏,将两台计算机连接在一起。我在同一台电脑上测试过,没问题。当我创建 ad-hoc 网络时(在 Windows 7 中)。一台计算机是一台服务器,它创建成功:

ssock = new ServerSocket(PORT);
sock = ssock.accept();

一台电脑是客户端:

sock = new Socket("localhost", PORT);

当运行到这一行时。我收到了这个错误:

java.net.ConnectException:连接被拒绝:连接在 java.net.PlainSocketImpl.socketConnect(Native Method) 在 java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:351) 在 java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:213) 在 java.net.PlainSocketImpl.connect(PlainSocketImpl.java:200) 在 java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366) 在 java.net.Socket.connect(Socket.java:529) 在 java.net.Socket.connect(Socket.java:478) 在 java.net.Socket.(Socket.java:375) 在 java.net.Socket.(Socket.java:189) 在 com.controller.MainController$GameObject.(MainController.java:78) 在 com.controller.MainController$3.run(MainController.java:180) 在 java.lang.Thread.run(Thread.java:662)

请帮我指出,这里有什么问题。

谢谢:)

【问题讨论】:

  • 中间是否有防火墙(操作系统防火墙或网络防火墙)?服务器是否可达?
  • 当您将服务器转移到另一台机器时,您用什么替换了客户端上的主机名“localhost”? (“localhost”表示“这台机器”,而不是“本地网络上的机器”)
  • @Philipp 我不太了解你。这是否意味着我们不应该使用localhost 而是其他名称?
  • @SJuan76 如何知道服务器可达?但是,当我连接这两台计算机的 ad-hoc 时,我可以一起玩另一个游戏,这有关系吗?谢谢:)
  • 是的,'localhost' 是 this 主机的名称。如果你想与另一个主机交谈,你必须使用它的名字,而不是你自己的。

标签: java sockets adhoc


【解决方案1】:

在一行

sock = new Socket("localhost", PORT); 

第一个参数“localhost”是您要连接的机器的主机名。 “localhost”始终表示当前机器。当服务器在另一台机器上运行时,您必须告诉套接字在哪里找到它。

您需要将“localhost”替换为另一台机器的 IP 地址或主机名。如果您不知道这些,请在服务器计算机上执行以下步骤:

  • 开始 -> 运行
  • 输入cmd并回车打开命令shell
  • 在命令行输入ipconfig并回车

您现在将看到机器上所有网络适配器的配置信息,包括它们的 IP 地址。

【讨论】:

  • 但是,如果我为局域网创建游戏,那么服务器是未知的(这取决于谁创建服务器)。那么,在 ad-hoc 中两台计算机之间的通信方式有什么不同吗?
  • 好吧,您可以检查本地计算机的 IP 地址和子网掩码,然后尝试连接到该子网中的每个 IP 地址。我不知道 windows ad-hoc 网络使用哪个子网大小,但是当它只是一个 /24 网络时(这是有道理的,因为没有人会在数百台机器上使用 ad-hoc 网络),你只需要检查255个IP地址,还是可行的。
  • 我刚刚发现 windows ad-hoc 网络使用 IP 网络 169.254.0.0/16,这意味着您必须检查 65536 个 IP 才能运行服务器。这可能需要几分钟(或并行化它时需要几秒钟),但对于用户来说仍然比手动查找和输入 IP 更方便。
【解决方案2】:

除了将“localhost”替换为所需的 IP 地址之外,您还可能需要检查指定的端口是否已在防火墙上打开。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-07
    • 1970-01-01
    相关资源
    最近更新 更多