Прослушивание сервером нескольких портов [Java] - PullRequest
4 голосов
/ 16 февраля 2011

Я пытаюсь выяснить, как создать Java-программу, которая может прослушивать несколько портов и выполнять различные действия в зависимости от того, к какому порту обращается клиент.

Я видел и понимаю основную программу клиент-сервер: http://systembash.com/content/a-simple-java-tcp-server-and-tcp-client/

Просто повторюсь, я хочу создать такие же отношения, но вместо того, чтобы сервер прослушивал только один порт и выполнял одно действие при получении ввода, я хочу, чтобы он прослушивал несколько портов и в зависимости от того, к какому порту подключается клиент отправляет данные, выполните другое действие.

Я надеюсь, что в будущем каждый порт будет принимать команды GET и PUT, но сейчас я просто пытаюсь выяснить, как настроить базовую структуру сервера, которая сможет слушать несколько порты. Я пробовал поискать в Google, но я не могу найти много, поэтому любая помощь приветствуется.

Спасибо заранее. -Anthony

Ответы [ 3 ]

7 голосов
/ 16 февраля 2011

Учебник, который вы упомянули, является очень базовым. Вы не можете написать какой-либо разумный сервер без использования потоков. Чтобы иметь два серверных сокета, вы должны создать новый поток для каждого порта, например так (псевдокод):

new Thread() {
    public void run() {
        ServerSocket server = new ServerSocket(6788);
        while(true) {
            Socket client1 = server.accept();
            //handle client1
        }
    }.start();

и (обратите внимание на другой порт):

new Thread() {
    public void run() {
        ServerSocket server = new ServerSocket(6789);
        while(true) {
            Socket client1 = server.accept();
            //handle client2
        }
    }.start();

Имея розетки client1 и client2, вы можете обрабатывать их отдельно. Кроме того, обработка подключения клиента должна выполняться в другом потоке, чтобы вы могли обслуживать несколько клиентов. Конечно, в этом коде много дублирования, но рассмотрим это как отправную точку.

Чтобы подвести итоги - если ваша цель - реализовать HTTP GET и PUT, используйте сервлет и избегайте всей этой суеты.

2 голосов
/ 16 февраля 2011

Сокет может быть открыт только для определенного порта, поэтому вам нужно несколько сокетов сервера (например, 1 сокет на порт). Я думаю вам также нужен один поток на сокет, чтобы сетевая активность на одном сокете не мешала работе на других.

Реализуете ли вы сервер в качестве учебного упражнения? Если нет, то я бы действительно действительно действительно настоятельно рекомендовал бы использовать ранее существующий сервер, например Tomcat .

0 голосов
/ 16 февраля 2011

Конечно, вы можете просто открыть несколько серверных сокетов.

Возможно, вы захотите взглянуть на jboss netty, который поможет вам реализовать протоколы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...