Поддерживают ли асинхронные сокеты отправку сообщений нескольким клиентам одновременно? - PullRequest
0 голосов
/ 23 января 2012

Будет ли это работать?

Socket someUdpSocket = new Socket(...);
EndPoint[] aLotOfClients = { ... };

foreach (EndPoint ep in aLotOfClients)
{
    someUdpSocket.BeginSendTo(someData, 0, someData.Length, 
                              SocketFlags.None, ep,
                              new AsyncCallback(someMethod), ep);
}

Я не смог найти ответ на этот вопрос.

1 Ответ

1 голос
/ 23 января 2012

Сокет может отправлять данные только на один адрес за раз, независимо от того, является ли он синхронным или асинхронным сокетом.

Однако вы можете отправлять данные на набор специальных адресов (при условии, что вы работаете на уровне IP), которые называются широковещательными адресами. Существует два различных варианта отправки данных нескольким клиентам одновременно: широковещательная рассылка и многоадресная рассылка.

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

Многоадресная рассылка больше похожа на чат. В IPV4 зарезервирован набор адресов многоадресной рассылки, и вы можете присоединиться к группе многоадресной рассылки, идентифицируемой по адресу, и перейти к ней. Когда вы отправляете некоторые данные в группу, сетевое оборудование обязательно доставит копию вашего пакета всем получателям, которые присоединились к группе.

Я предлагаю вам поискать многоадресную и широковещательную рассылку (читать rfc тоже неплохо), я надеюсь, что вы могли бы начать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...