我编写了一个简单的java程序,它创建一个ServerSocket并返回一些html。该程序似乎正常工作,但我只能通过本地主机上的浏览器而不是外部设备获得响应。
只有当我的mac(OS X 10.10; Yosemite)进入休眠状态然后唤醒时,外部设备才能从java应用程序中获取内容。
在让笔记本电脑进入睡眠状态之前和启动java程序之后,我已经运行了sudo lsof -i -n -P | grep TCP',我看到它正在侦听我实例化我的ServerSocket的端口。
java 6539 hostname 7u IPv6 0xf465ab9093077243 0t0 TCP *:4444 (LISTEN).
当我从睡眠中唤醒它后再次重新运行命令时它仍然几乎相同。
我想知道这里发生了什么,我怎么能在启动它时让外部设备连接到我的java程序工作,而不是让我的笔记本电脑先睡一觉。
更新1: 该代码在localhost上正常工作。
public static void main(String[] args) {
System.out.println("Start!");
ServerSocket listener = null;
try {
listener = new ServerSocket(4444, 1, InetAddress.getByAddress(new byte[] {0,0,0,0}));
System.out.println("listening");
while (true) {
System.out.println("listening...");
Socket socket = listener.accept();
System.out.println("connection accepted");
try {
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
out.println("HTTP/1.1 200 OK");
out.println("Content-Type: text/html");
out.println("\r\n");
out.println(new Date().toString());
out.println("<h1>hello world</h1>");
out.println("this is only a test!");
out.println(""+ socket.getPort());
System.out.println("connection at port "+socket.toString());//socket.getPort());
out.flush();
out.close();
} finally {
System.out.println("close socket");
socket.close();
}
System.out.println("Loop End");
}
}
catch (Exception e){
System.out.println(e.getMessage());
}
finally {
if (listener != null)
try {
listener.close();
}
catch (Exception e) {
System.out.println(e.getMessage());
}
}
System.out.println("End!");