Если вы хотите отправлять и получать от нескольких клиентов одновременно - по крайней мере, для стороны приема - вам нужно будет использовать потоки, так как все ваши клиенты могут отправлять данные на ваш сервер одновременно, а пакеты каждого клиента - необходимо будет обрабатывать отдельно. (Я предполагаю, что данные, полученные в «read_option», составляют более нескольких байтов, и для обработки требуется более нескольких микросекунд - если это предположение неверно, то вы можете делать то, что делаете сейчас, но я «Я уверен, что это EASIER, чтобы решить это, используя потоки». Очевидно, что, если у вас есть достаточное количество клиентов, у вас может не хватить пропускной способности центрального процессора или сети, чтобы обрабатывать все пакеты за определенный промежуток времени.
Возможно одновременное использование многоадресной рассылки для всех клиентов, но вы не можете гарантировать, что все клиенты будут получать данные одновременно, - конечно же, если мы говорим о времени компьютера одновременно. Если клиенты находятся в той же сети, что и сервер, и если мы говорим о человеческом времени реакции (0,05-0,1 с), то, возможно, вы можете это достичь. Если машины распределены по всему интернету, вы должны быть довольны достижением 0,1-0,5 с - и, возможно, хуже.
Итак, учитывая комментарии:
Поскольку вы выполняете send()
и receive()
в read_option()
, ваш read_option будет блокироваться в этот момент, поэтому любой другой клиент будет не обрабатываться.
Вам, по существу, нужно будет начать поток для каждого клиента, используя pthread_create()
. Затем вы можете «общаться» между сервером и каждым из клиентов независимо друг от друга. Я ожидаю, что вам также понадобится какая-то синхронизация между каждым потоком, чтобы они не бегали впереди друг друга, или некоторые из них. Поскольку я не знаю, в какую игру вы играете, я не уверен, что такое «правила игры», и не могу прокомментировать это. На самом деле, я думаю, что это отличный вопрос для другого вопроса, скорее чем в этом вопросе [в противном случае, я боюсь, что это никогда не закончится!]