У меня есть такая розетка:
s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
Правильно ли я тогда, когда я звоню
s.Receive(byte[]);
Я получаю ровно одну дейтаграмму? Мне нужно обрабатывать дейтаграммы одну за другой.
Будет возвращено не более одного UDP-пакета.(Если учесть, что исключение приводит к тому, что «ничего не возвращается».)
В документации Socket.Recieve указано (в разделе замечаний):
Если вы используете сокет без соединения, Receive будет читать first поставленную в очередь дейтаграмму с адреса получателя , указанного вами в методе Connect.
Однако обратите вниманиеследующее предложение:
Если датаграмма, которую вы получаете, больше, чем размер параметра буфера, буфер заполняется первой частью сообщения, лишние данные теряются и выдается исключение SocketException.
Вызов также может вызвать исключение по тайм-ауту или при отсутствии данных в неблокирующем режиме и т. Д.
Счастливое кодирование.
Да, вы будете.Специфика UDP, которая делает это возможным, известна как Message Boundary Preservation.
Message Boundary Preservation.
Если под one by one вы подразумеваете, надежно и в порядке , вы должны иметь вИмейте ввиду, что UDP тоже не гарантирует.Пожалуйста, обратитесь эта статья для получения дополнительной информации
one by one