2016-03-02 2 views
1

Я новичок в программировании сокетов, у меня проблема в понимании serverocket. предположим, мы создаем ServerSocket так:Как работает серверная розетка с несколькими записями?

loadbalancerSocket = new ServerSocket(port, 20); 
connection = loadbalancerSocket.accept(); 

, а затем после некоторого материала, написать что-то в своем буфере:

BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(connection.getOutputStream())); 
       writer.write("Hello!"); 
       writer.flush(); 
       writer.close(); 

Мой вопрос: как соединение понять, какой клиент должен получить ответ сервер? наш отставание составляет 20, а 20 клиент может одновременно подключаться к серверному сокету (как я понял).

ответ

2

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

ServerSocket не подключен ни к одному конкретному клиенту. Подключенный сокет - это сокет, возвращаемый с accept(). Если вы хотите обрабатывать несколько клиентов параллельно, вы должны вызывать accept() несколько раз и обрабатывать соединения отдельно. Вы можете создать специальный поток для каждого соединения, например.

accept() обычно вызывается в цикле, а вновь созданный подключенный сокет, возвращаемый с accept(), обычно передается обработчику, который отвечает за конкретный клиент.

+0

спасибо :) @Zaboj – user122434