【发布时间】:2013-02-08 20:38:25
【问题描述】:
好吧,这是我的代码:
import java.io.InputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
import java.net.ServerSocket;
import java.net.InetAddress;
import java.net.UnknownHostException;
public class TcpServerEcho {
public static void main(String argv[]) {
int port = Integer.parseInt(argv[0]);
ServerSocket server_socket = null;
try {
InetAddress thisIp = InetAddress.getByName("kiravaio.homepc.it");
System.out.println(thisIp.getHostAddress());
//or
//server_socket = new ServerSocket(port, 10, InetAddress.getByName("79.47.49.68"));
server_socket = new ServerSocket(port, 10, thisIp);
}
catch (Exception e) {
System.err.println("Impossible to create socket server!");
System.out.flush();
System.exit(1);
}
System.out.printf("Server active on port: %d and on address %s\n", port, server_socket.getInetAddress());
Socket client_socket = null;
boolean exec = true;
while(exec) {
try {
client_socket = server_socket.accept();
InputStream is = client_socket.getInputStream();
OutputStream os = client_socket.getOutputStream();
boolean stop = false;
System.out.println("Received: ");
while(!stop) {
int b = is.read();
System.out.print((char)b);
if(b == -1) {stop = true;}
else {os.write( (byte)b );}
}
}
catch (IOException ioe) {
System.err.println("Error I/O!");
} finally {
try {
client_socket.close();
}
catch (IOException ioe) {}
}
System.out.println("");
}
try {
/* Never executed */
server_socket.close();
} catch (IOException ioe) {}
}
}
我无法在我的公共 IP 上创建套接字。 我有一个域 kiravio.homepc.it 每次我的 ip public 更改时总是更新。 所以首先,我得到我的IP地址 InetAddress thisIp = InetAddress.getByName("kiravaio.homepc.it"); 然后我创建套接字: server_socket = new ServerSocket(port, 10, thisIp); 但它总是失败,我不知道为什么, 仅在 127.0.0.1 上创建套接字有效! :(
【问题讨论】:
-
你说的“公网IP”是指路由器的IP吗?因为你的电脑只能在自己的网络设备上打开套接字,iirc。
-
我的意思是,如果我去whatsmyip.org,我会得到我的公共 ip,我想将它绑定到一个套接字中......这样我就可以接受连接请求......
-
见 Brian Roach 的回答;在编写需要联网的程序之前,您应该学习联网的基础知识。
-
老实说……我不明白!如果我在本地 ip 上绑定程序,那么......我怎样才能从外部访问这个程序?我应该使用公共 IP 对吗?
-
别误会,我没有告诉你;当您尝试编写使用它的程序时,只需要了解网络。要回答您的问题,请阅读 Brian Roach 的回答。
标签: java ip serversocket