我正在学习有关Java的套接字编程。使用Java 8,有这个简单的服务器:无法连接Java套接字服务器和客户端
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
public class Main {
public static void main(String[] args) throws Exception {
System.out.println("MY IP address is " + InetAddress.getLocalHost().getHostAddress());
ServerSocket server = new ServerSocket(4031);
Socket socket = server.accept();
System.out.println("Yay somebody connected! " + socket);
socket.close();
server.close();
}
}
它所做的就是显示主机的地址,然后等待一个插座进行连接。
而且有这样的客户:
import java.net.Socket;
public class Main {
public static void main(String[] args) throws Exception {
System.out.println("Trying to connect...");
Socket s = new Socket("123.456.7.890", 4031);
System.out.println("Cool");
s.close();
}
}
当我运行在我家的服务器和客户端(在两个不同的计算机),这个工程:我简单地抓取服务器显示的IP地址,将其提供给客户端,并建立连接。
现在我在我家有这个相同的服务器,而我在办公室运行我的客户端。在同一个过程中,我将服务器打印的IP地址提供给我的客户端。但是,连接永远不会建立:服务器或客户端都不会生成套接字。
- 恰巧与Java 7和8
- 试了不同端口两者。
- 不引发任何异常。两个节目都挂在那里等着。
- 我在两台机器上都使用Mac OSX Mavericks 10.9.5。
- 两台计算机上的防火墙均已关闭。
- 他们确实连接到互联网。实际上,我使用Chrome远程桌面来控制服务器并检查其状态。
- 当两台机器都在同一栋房子里时,这很好。但不是当一个人在房子里,另一个人在别的地方时。
- 是的,这也适用于本地主机。
以上几点似乎表明问题出在我用来连接到我的服务器的IP地址。也许InetAddress.getLocalHost().getHostAddress()
不适合这个 - 虽然它让我感到困惑,为什么这个工作在同一个房子里的两台机器。
这是什么,我做错了?
在您的问题中发布堆栈跟踪。总是。此代码不会永久封锁。我怀疑你正在得到连接超时。它会在一分钟左右发生。也许你没有耐心。 – EJP 2014-10-10 23:48:31
@Voldemort,你是否进一步分析了这个问题? – aioobe 2014-10-13 15:37:26