HTTP-сервис Java на Mac сервере с администратором сервера Apple

Я написал простую программу com.sun.net.httpserver.HttpServer, которая работает на несерверном Mac. Когда я посещаю http://localhost:39600/test в веб-браузере он дает мне правильный ответ: "Вот мой ответ!".

Затем я перемещаю этот Java-файл на веб-сервер Mac OS X Snow Leopard, управляемый с помощью Admin Server, компилирую его, запускаю на порту 39600, посещаю http://localhost:39600/test в интернет-браузере веб-сервера. Это дает правильный ответ. Но когда я посещаю http://webserveraddress:39600/test это не отвечает вообще. Я знаю, что это, вероятно, что-то с администратором сервера и брандмауэром, но как мне открыть порт 39600 для внешних запросов через администратора сервера?

Вот простой стандартный класс Java, хотя я думаю, что это больше проблема с администратором сервера.

package server;

import java.io.*;
import java.net.*;
import com.sun.net.httpserver.*;

public class Server {

    private static final int SERVER_PORT_NUMBER = 39600;
    private static final int MAX_WAITING_CONNECTIONS = 10;

    public static void main(String[] args) {
        new Server().run();
    }

    private Server(){
    }

    private HttpServer server;

    private void run(){
        configure();
        server.createContext("/test", testHandler);
        server.start();
    }

    private HttpHandler testHandler = new HttpHandler(){

        @Override
        public void handle(HttpExchange t) throws IOException {
            //TODO read request body

            t.sendResponseHeaders(200, 0);  //all ok!
            OutputStream os = t.getResponseBody();
            os.write("Here's my response!".getBytes());
            os.close();
        }

    };

    private void configure(){
        try {
            server = HttpServer.create(new InetSocketAddress(SERVER_PORT_NUMBER),
                    MAX_WAITING_CONNECTIONS);
        } 
        catch (IOException e) {
            System.out.println("Could not create HTTP server: " + e.getMessage());
            e.printStackTrace();
            return;
        }

        server.setExecutor(null); // use the default executor
    }
}

2 ответа

Решение

Оказывается, что Admin Сервера не управляет определенными портами. Графический интерфейс для межсетевого экрана Snow Leopard позволяет открывать только определенные приложения (и, следовательно, связанные с ними номера портов). Чтобы открыть определенный порт, вы должны зайти в терминал и набрать sudo ipfw add <rulenumber> allow tcp from any to any dst-port <portnum> где <rulenumber> находится между 00001 и 65535 и <portnum> также (есть зарезервированные номера портов... вы можете увидеть, какие из них с sudo ipfw list,

Скорее всего, это вызвано закрытым портом на маршрутизаторе, хотя это может быть брандмауэр на веб-сервере. Вам необходимо открыть порт 39600 на маршрутизаторе для сети сервера - это называется переадресацией портов.

Другие вопросы по тегам