Я использую UdpClient
для отправки данных по многоадресному адресу.UdpClient: укажите исходный порт при отправке данных
код выглядит следующим образом:
m_udpclientSender = new UdpClient();
m_remoteEndPoint = new IPEndPoint(m_multicastAddress, m_port);
m_udpclientSender.ExclusiveAddressUse = false;
m_udpclientSender.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
m_udpclientSender.JoinMulticastGroup(m_multicastAddress, 255);
m_udpclientSender.ExclusiveAddressUse = false;
m_udpclientSender.Send(buffer, buffer.Length, m_remoteEndPoint);
Он отправляется в соответствующий порт/IP, но он выдается от случайного порта (который, как ожидается), но мне нужно/хочу, чтобы это было отправлено из определенный порт (тот же порт, который я отправляю).
Я видел, что: How to specify source port of a UdpPacket?
Но мне нужно не только использовать адрес, и если я даю это в конструкторе, я получил исключение (о том, что это уже связано).
Я должен поместить тот же порт, потому что протокол определяет, что ответ не должен быть многоадресным.
Ваш коллега вашего udpclient прослушивает уже указанный порт, не так ли? поэтому он знает, к какому порту он должен отвечать (тот же самый порт, который он слушал). Итак, почему вы хотите указать порт источника? – faceman
Протокол mDNS определяет, что ЕСЛИ порт отправителя НЕ является 5353 (порт mDNS), это запрос UNICAST. Это означает, что я не получу его в группе многоадресной передачи, которую я слушаю (и этот другой тоже не получит этот ответ). – J4N
Я согласен с Дэвидом Пфеффером, но в вашем коде у вас все еще будет проблема с свойством ExclusiveAddressUse. Проверьте это: [link] (http://msdn.microsoft.com/en-us/library/system.net.sockets.udpclient.exclusiveaddressuse.aspx). Вероятно, вам было бы лучше использовать класс сокета. – faceman