Я новичок в C #, VS и .NET.У меня есть некоторые базовые знания, но мне очень трудно общаться с UDP с имеющимся у меня сервоконтроллером.
Я надеюсь, что кто-то может подсказать мне, что не так с моим кодом, как это работает,и каков наилучший подход к получению сообщений.
Мой первый шаг - передать сообщение «кто», и когда мой сервопривод увидит это, я получу ответ с информацией об этом сервоприводе.
public void Discover()
{
byte[] message = Encoding.ASCII.GetBytes("who");
IPEndPoint targetEndPoint = new IPEndPoint(IPAddress.Broadcast, LINKPORT);
IPEndPoint remoteEndPoint = new IPEndPoint(IPAddress.Any, 0);
System.Console.WriteLine("New Transimission Sequence:");
foreach (NetworkInterface ni in NetworkInterface.GetAllNetworkInterfaces())
{
if (ni.NetworkInterfaceType == NetworkInterfaceType.Ethernet)
{
foreach (UnicastIPAddressInformation ip in ni.GetIPProperties().UnicastAddresses)
{
if (ip.Address.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)
{
IPEndPoint localEndpoint = new IPEndPoint(IPAddress.Parse(ip.Address.ToString()), LINKPORT);
UdpClient udpClient = new UdpClient(localEndpoint);
udpClient.Send(message, message.Length, targetEndPoint);
UdpClient udpClientB = new UdpClient(remoteEndPoint);
udpClientB.Client.ReceiveTimeout = 1000;
string recvMessage;
try
{
recvMessage = System.Text.Encoding.UTF8.GetString(udpClientB.Receive(ref remoteEndPoint));
}
catch (Exception e)
{
recvMessage = e.Message;
}
System.Console.WriteLine(recvMessage);
udpClient.Close();
udpClientB.Close();
}
}
}
}
System.Console.WriteLine("==========================================================================================");
return;
}
Это то, что у меня сейчас есть.Я понимаю, что это очень грубо в данный момент, однако я даже не могу заставить это работать ... Я пытаюсь передать сообщение "кто" по всем моим сетевым картам в коде выше.И затем, используя udpClientB
, я хочу получить сообщение.Я попытался использовать udpClient
, и это не сработало, и именно поэтому я создал udpClientB
.Я также пытался создать отдельный поток, который просто прослушивает этот порт и ничего ...
Прямо сейчас это то, что я получаю в окне консоли.
New Transimission Sequence:
Exception thrown: 'System.Net.Sockets.SocketException' in System.dll
A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond
Exception thrown: 'System.Net.Sockets.SocketException' in System.dll
A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond
Exception thrown: 'System.Net.Sockets.SocketException' in System.dll
A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond
==========================================================================================
Когда я пыталсяиспользуя udpClient
в качестве отправителя и получателя, я получал «кто» в окне консоли ... Что я делаю не так?Что происходит?
Я утроил проверку, и сообщения отправляются, и я отвечаю на сообщение, когда оно достигает моего сервоконтроллера, что происходит.
Также вопрос после этогосделано, каков наилучший подход для такого рода вещей?Этот код получает удар по кнопке формы Windows, в конце концов я хочу отобразить всех, кто откликнулся в списке форм Windows.Должен ли я создавать асинхронные вызовы функций?Использовать «Таймер», чтобы постоянно слушать и очищать буфер Ethernet?Создать новую тему для прослушивания?Или то, что я сейчас делаю, просто в строке?
Спасибо, что уделили время на прочтение этого.