Нужно ли UDP-сокету проходить процесс принятия, как TCP-сокеты?

Я работаю с UDP, и мне было интересно узнать о методе Accept, когда несколько компьютеров должны подключиться к серверу. До сих пор я работал с классом UDPCliente, классом IPEndPoint и методом BeginRecieve / EndRecieve, чтобы создать сервер, к которому несколько компьютеров могут подключаться одновременно.

Мой вопрос прост: нужно ли мне использовать метод Accept для обработки входящего соединения и создания нового сокета для каждого нового соединения?

Каков наилучший способ обработки нескольких соединений с UDP?

Примеры кода, которые я видел до сих пор, создают новый класс UDPClient и IPEndPoint, где сервер после этого ожидает соединения, код вызывает BeginRecieve, передавая функцию получения данных, а затем снова запускает процесс BeginRecieve.

Вот примеры кода, которые я использовал до сих пор:

public static void receiveCallback(IAsyncResult ar)
{
    UdpClient u = (UdpClient)((UdpState)(ar.AsyncState)).u;
    IPEndPoint e = (IPEndPoint)((UdpState)(ar.AsyncState)).e;

    byte[] receiveBytes = u.EndReceive(ar, ref e);
    UdpState s = new UdpState();
    s.e = e;
    s.u = u;
    u.BeginReceive(new AsyncCallback(receiveCallback), s);
}

public static void receiveMessages()
{
    IPEndPoint e = new IPEndPoint(IPAddress.Any, 5050);
    UdpClient u = new UdpClient(e);
    UdpState s = new UdpState();

    s.e = e;
    s.u = u;
    u.BeginReceive(new AsyncCallback(receiveCallback), s);
}

2 ответа

Решение

UDP не имеет соединения, поэтому принимать нечего. Если вам нужны соединения по UDP, то вы должны их реализовать. В идеале вы должны назначать каждому "соединению" какой-то идентификатор и включать его в каждую дейтаграмму, отправляемую на сервер. В некоторых случаях может быть достаточно просто полагаться на IP-адрес и порт для определения "соединений".

Но вы можете делать это как хотите. UDP обрабатывает каждую дейтаграмму как независимую.

Короткий ответ - нет, вы не используете accept() с UDP.

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

Другие вопросы по тегам