Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java套接字不能通过LAN工作?_Java_Sockets_Networking - Fatal编程技术网

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

Java套接字不能通过LAN工作?,java,sockets,networking,Java,Sockets,Networking,我正在尝试将多人游戏功能添加到我创建的游戏中。我已经通读了Java关于套接字的内容,但发现自己仍然无法实现我想要的功能。在一个例子中,另一个用户似乎遇到了与我相同的问题 就我而言 我正在运行Java教程中直接给出的两个程序 当我在同一台计算机上运行它们时,它们工作得完美无缺 当我在OSX机器上运行服务器程序(使用root)和在W7机器上运行客户机程序时,我不断地得到IOExceptions——客户机即使在同一个端口上也无法到达服务器机器(我对两者都使用9355) 当我在我的W7机器上运行服务器

我正在尝试将多人游戏功能添加到我创建的游戏中。我已经通读了Java关于套接字的内容,但发现自己仍然无法实现我想要的功能。在一个例子中,另一个用户似乎遇到了与我相同的问题

就我而言

  • 我正在运行Java教程中直接给出的两个程序
  • 当我在同一台计算机上运行它们时,它们工作得完美无缺
  • 当我在OSX机器上运行服务器程序(使用root)和在W7机器上运行客户机程序时,我不断地得到IOExceptions——客户机即使在同一个端口上也无法到达服务器机器(我对两者都使用9355)
  • 当我在我的W7机器上运行服务器程序,在我的OSX机器上运行客户端程序(使用root)时,仍然会出现IOExceptions
一些附加信息

  • 正在运行
    System.out.println(serverSocket.getInetAddress())在两台机器上返回
    0.0.0.0/0.0.0.0

我明白了

无法获取连接到192.168.0.37的I/O
操作超时
java.net.ConnectException:操作超时
位于java.net.PlainSocketImpl.socketConnect(本机方法)
位于java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339)
位于java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200)
位于java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182)
位于java.net.socksocketimpl.connect(socksocketimpl.java:392)
位于java.net.Socket.connect(Socket.java:579)
位于java.net.Socket.connect(Socket.java:528)
位于java.net.Socket。(Socket.java:425)
位于java.net.Socket(Socket.java:208)
Main.MainClass.Main(MainClass.java:17)
操作超时
为什么需要禁用客户端或服务器计算机上的防火墙?Java没有为传入数据打开套接字吗?如果它还没有工作,为什么教程会让它变得如此简单

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

为什么我需要禁用防火墙

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

Java没有打开套接字吗


是的,这就是你获得0.0.0.0的原因:它是
服务器套接字的侦听地址

你的客户端是否使用OSX机器的ip地址进行连接?
0.0.0.0
信息是完全无用的……你不断得到什么异常?你为什么不提供所有数据就匆忙下结论?”为什么我需要禁用防火墙?“你可能不需要。”Java没有打开套接字吗?是的,它打开了为什么教程会让它变得如此简单…?“是的。如果您希望在这里得到帮助,您将需要提出一个可回答的问题,而不仅仅是一系列基于猜测的问题,而这些猜测又是基于隐藏的证据。@f1sh从我在其他地方读到的,
0.0.0
表示服务器程序连接到服务器机器上的所有网络接口。甚至在我链接的类似帖子中也提到了它。@EJP我的道歉;我已经包含了一些附加信息。@user5705019这是真的。这就是为什么它不保存任何信息,因为所有机器都会打印这些信息。看起来你的操作系统真的因为任何原因而阻止了传入的连接。防火墙的全部目的是阻止传入的连接,而OP正试图这样做,因此需要打开防火墙以不阻止所需的端口也就不足为奇了+1我已完全禁用路由器的IPv4防火墙,但连接仍无法通过。您是否已禁用运行软件服务器部分的计算机上的防火墙?@user5705019您是否仍收到“操作超时”或其他消息?我已切换到不同的环境(不同的路由器)现在一切正常。它一定与这个CenturyLink路由器/调制解调器组合有关…*--
  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
ConnectException: operation timed out