С# UdpClient не получает пакет, видимый WiresharkC#

Место общения программистов C#
Ответить
Anonymous
 С# UdpClient не получает пакет, видимый Wireshark

Сообщение Anonymous »

Я реализую протокол обнаружения udp, в котором я транслирую сообщение в свою локальную сеть и получаю сообщение от специального оборудования (или симулятора оборудования) или несколько ответов в зависимости от того, сколько экземпляров присутствует в сети.

У меня широковещательная передача работает нормально, однако с приемной частью есть некоторые проблемы: я вижу отправляемые широковещательные сообщения, но никогда не реагирует оборудование. Я знаю, что оборудование отправляет широковещательные сообщения, потому что я вижу, что они поступают на Wireshark, когда я отслеживаю трафик на этом порту.

Что я делаю не так?

IPEndPoint receiveIpEndPoint = new IPEndPoint(IPAddress.Any, 777);

private List FindIPs() {
string message = "{\"TCS\":{\"IP\":\"" + GetLocalIPAddress().ToString() + "\", \"Port\":777}}";
byte[] tempBytes = ASCIIEncoding.ASCII.GetBytes(message);
IPEndPoint broadcastIpEndPoint = new IPEndPoint(IPAddress.Broadcast, 777);

// list of UdpClients to send
List sendClients = new List();
foreach (NetworkInterface networkInterface in NetworkInterface.GetAllNetworkInterfaces()) {
if ((!networkInterface.Supports(NetworkInterfaceComponent.IPv4)) ||
(networkInterface.OperationalStatus != OperationalStatus.Up)) {
continue;
}

IPInterfaceProperties adapterProperties = networkInterface.GetIPProperties();
UnicastIPAddressInformationCollection unicastIPAddresses = adapterProperties.UnicastAddresses;
IPAddress ipAddress = null;

foreach (UnicastIPAddressInformation unicastIPAddress in unicastIPAddresses) {
if (unicastIPAddress.Address.AddressFamily != AddressFamily.InterNetwork) {
continue;
}
ipAddress = unicastIPAddress.Address;
break;
}

if (ipAddress == null) {
continue;
}

UdpClient sendClient = new UdpClient(new IPEndPoint(ipAddress, 0));
sendClients.Add(sendClient);
}

var udpreceive = new UdpClient(receiveIpEndPoint);
udpreceive.BeginReceive(new AsyncCallback(ProcessUDPResponse), udpreceive);

Log(message, LogManager.GetLogger("Sent UDP broadcast"));
foreach (var udp in sendClients) {
udp.EnableBroadcast = true;
udp.Send(tempBytes, tempBytes.Length, broadcastIpEndPoint);
}

while(addresses.Count < 1) {

}
return addresses;
}

private void ProcessUDPResponse(IAsyncResult result) {
UdpClient udp = result.AsyncState as UdpClient;
string returnData = Encoding.ASCII.GetString(udp.EndReceive(result, ref receiveIpEndPoint));
Console.WriteLine("************** " + returnData.ToString());
if (returnData.Contains("MAC")) {
addresses.Add(receiveIpEndPoint.Address.ToString());
}
udp.BeginReceive(new AsyncCallback(ProcessUDPResponse), udp);
}


Подробнее здесь: https://stackoverflow.com/questions/433 ... -wireshark
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»