【发布时间】:2009-12-31 11:43:40
【问题描述】:
我正在构建一个简单的服务器应用程序,我可以在本地网络中连接到它。但我无法通过互联网连接。
这是我的服务器代码:
ServerSocket server;
try {
server = new ServerSocket(4000);
} catch(IOException ex) {
System.out.printf("Could not bind socket 4000\n");
System.exit(1);
}
try {
Socket socket = server.accept();
ClientThread client = new ClientThread(socket);
client.start();
} catch(IOException ex) {
}
这是客户端:
try {
System.out.printf("connecting...\n");
Socket socket = new Socket("mydomain.org", 4000);
System.out.printf("connected!\n");
} catch(UnknownHostException ex) {
ex.printStackTrace();
} catch(IOException ex) {
ex.printStackTrace();
}
我已经在我的路由器上转发了端口 4000,它应该可以工作。我之前转发过其他端口,比如 80 和 22。
当我运行客户端时,我得到“正在连接...”字符串,它挂在那里。我没有得到“连接!”或堆栈跟踪。但就像我之前说的,它确实在本地网络上工作。它在连接到 127.0.0.1 和使用 192.168.1.90 时有效。
我使用CanYouSeeMe.org 来检查端口是否打开。在 80 端口成功,但在 4000 超时。
【问题讨论】:
-
套接字适用于本地网络,但对于互联网通信,最好使用 URL、URLConnection ...
标签: java networking sockets