Возможно, вы получите лучший ответ от пользователя Unix, но я предоставлю то, что знаю.
Вашему серверу нужен поток, который открывает «прослушивающий» сокет, который ожидает входящих соединений.Этот поток может быть основным потоком для простоты, но может быть альтернативным потоком, если вы обеспокоены, например, взаимодействием с пользовательским интерфейсом (в Windows это будет проблемой, не уверенной в Unix).Похоже, вы как минимум так далеко.
Когда «слушающий» сокет принимает соединение, вы получаете «подключенный» сокет, который подключен к «клиентскому» сокету.Вы бы передали этот «подключенный» сокет новому потоку, который управляет чтением из и записи в «подключенный» сокет.Таким образом, одно изменение, которое я бы предложил, - это управление «подключенным» сокетом в одном потоке, а не в двух отдельных потоках (один для чтения, другой для записи), как вы сделали.Чтение и запись в один и тот же сокет могут быть выполнены с помощью системного вызова select()
, как показано здесь .
Когда подключается новый клиент, ваш «слушающий» сокет предоставит новый »подключен сокет, который вы передадите другому потоку.На данный момент у вас есть два потока - один, который управляет первым соединением, и другой, который управляет вторым соединением.Что касается розеток, то здесь нет различий между клиентами.У вас просто есть два открытых соединения, по одному с каждым из ваших двух клиентов.
На этом этапе возникает вопрос, что означает «обслуживать их по-другому».Если ожидается, что клиенты будут взаимодействовать с сервером уникальными способами, то это нужно как-то определить.Взаимодействия могут быть определены на основе IP-адреса «клиентского» сокета, который вы можете запросить, но это кажется произвольным и может быть изменено в сети.Он также может основываться на начальном блоке данных, полученных из сокета «клиент», который указывает требуемый тип взаимодействия.В этом случае поток, управляющий «подключенным» сокетом, может прочитать сокет для ожидаемого типа взаимодействия, а затем передать сокет объекту класса, который управляет этим типом взаимодействия.
Надеюсь, это поможет.