Что вы хотите - это многопоточный сервер сокетов.
Для этого вам нужен основной поток, который открывает сокет для прослушивания (и ждет входящих соединений клиента). Это должно входить в цикл while.
Затем, когда клиент подключается к нему, функция accept()
будет разблокирована и в этот момент вам нужно будет обслуживать клиентский запрос, передав запрос потоку, который будет работать с ним.
Серверная сторона обратится назад и ждет другого соединения, в то время как предыдущий поток выполняет свою задачу.
Вы можете либо создавать потоки по мере необходимости, либо использовать пул потоков, который может быть более эффективным (сохранение во время инициализации новых потоков).
Посмотрите here для получения более подробной информации. Ищите многопоточный серверный сокет в сети, в частности bind()
, listen()
и accept()
со стороны сервера.
Если это не для понимания программирования сокетов, я бы предложил не использовать простые сокеты. Вместо этого используйте сетевую инфраструктуру. [ACE] (http://www.cs.wustl.edu/~schmidt/ACE-overview.html) или [ZeroMQ] (http://www.zeromq.org/). Изначально было бы неплохо делать ванильные сокеты, но со временем это становится беспорядочным. – Vikas
Я попытался прослушать порт снова в другом потоке, но он не сработал, он говорит, что порт используется, поэтому я спросил;) – Lefsler
Нет ничего особенного, что вам нужно сделать. Вы все еще слушаете, так что не пытайтесь снова слушать. –