java监听端口os x

时间:2015-07-09 10:15:17

标签: java macos tcp

我编写了一个简单的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!");

0 个答案:

没有答案