Обработка 10 клиентов с одним сервером UDP с использованием Winsock

Я уже установил приложение «сервер-клиент» с использованием сокетов UDP, но мой сервер не может обрабатывать более одного клиента одновременно. Теперь я хочу изменить свое приложение таким образом, чтобы 10 клиентов работали на разных машинах, а мой сервер работал на отдельной машине. Я хочу, чтобы мой сервер мог взаимодействовать с каждым из 10 клиентов, работающих на 10 разных машинах. Я также не хочу пропустить данные, поступающие от любого клиента. Каков наилучший способ сделать это? Пожалуйста, поделитесь со мной некоторыми примерами :( Я искал его в Интернете с недели, но не смог найти ничего, что соответствовало бы требованиям моего приложения. Жду помощи.


person Ayse    schedule 14.03.2013    source источник
comment
Проблема в том, что UDP изначально не является надежным протоколом. Нет гарантии доставки или заказа. Данные могут и, скорее всего, будут потеряны, если вы не реализуете собственную защиту в своем приложении. Вот почему существует TCP, и кажется, что он лучше подходит для вашего приложения, чем UDP.   -  person Karim ElDeeb    schedule 14.03.2013
comment
Но я вынужден использовать UDP :( Не разрешено работать по TCP :( Что мне теперь делать? Я могу попробовать реализовать защиту в своем приложении, как только оно начнет работать с десятью Клиентами одновременно.   -  person Ayse    schedule 14.03.2013
comment
Попытка сделать UDP надежным достаточно трудна. UDP не требует установления соединения, он просто отправляет сообщение надеется, что оно достигнет сервера. Сервер может быть в автономном режиме или не существовать, и ваша функция sendto сработает, это невозможно сказать. Боюсь, я не смогу вам в этом помочь, но я попытаюсь дать вам подсказку. Сначала отправьте сообщение от клиента на сервер, затем сервер, получив сообщение, должен ответить и сказать, что я его получил, чтобы клиент знал, что сообщение прошло успешно, если клиент его не получил, он должен повторно отправить снова. TCP уже обрабатывает это за вас.   -  person Karim ElDeeb    schedule 14.03.2013
comment
похоже, это может мне помочь :) сейчас попробую :) а как насчет обработки 10 клиентов? Должен ли я использовать потоки для этого?   -  person Ayse    schedule 14.03.2013
comment
Я не думаю, что вам нужна многопоточность для этого. Ваш сервер обслуживает только 10 клиентов по UDP, так что без потоков все в порядке.   -  person Karim ElDeeb    schedule 14.03.2013
comment
А что, если два клиента отправляют данные одновременно? Сколько шансов, что сервер пропустит некоторые данные?   -  person Ayse    schedule 14.03.2013
comment
Конечно, это UDP, и следует ожидать потери данных. Когда сервер что-то пропустит, клиент, отправивший это сообщение, не получит от сервера сообщение о том, что я получил ваше сообщение, поэтому клиент будет знать, что сообщение не было получено, и должен отправить его повторно. Сервер должен идентифицировать клиентов по их паре IP:Port, чтобы отслеживать, кто что отправил. Когда клиент получает ответ от сервера, говоря, что он получил сообщение, он должен приступить к отправке следующего сообщения и т. д.   -  person Karim ElDeeb    schedule 14.03.2013
comment
Ты всегда помогал мне со всеми моими глупыми вопросами. Еще раз спасибо :)   -  person Ayse    schedule 14.03.2013