Обнаружение Lantronix XPort Pro и XPort с использованием сокетов C#C#

Место общения программистов C#
Ответить
Anonymous
 Обнаружение Lantronix XPort Pro и XPort с использованием сокетов C#

Сообщение Anonymous »

Я пытаюсь найти устройства Lantronix XPort Pro в сети с помощью C#. В качестве примера я использую код Python, который нашел на вики-сайте разработчиков Lantronix http://wiki.lantronix.com/developer/Lan ... y_Protocol.

Приложение, которое я пишу, написано на C#, и мне нужно найти наши устройства, на которых установлены устройства Lantronix. Кажется, что когда я вызываю функцию socket.RecieveFrom, приложение просто зависает.

Любые идеи о том, что я делаю неправильно. Код Python по ссылке выше правильно определяет устройства. Я смогу продублировать это на C#.

Буду очень признателен за любую помощь.

private void FindLantronixXPort()
{
// This is the socket code that will broadcast from
// the local machine looking for responces from Lantronix
// XPort servers

// Create the array for our message chars
char[] chars = new char[4];

// Build the actual message
chars[0] = Convert.ToChar(0);
chars[1] = Convert.ToChar(0);
chars[2] = Convert.ToChar(0);
chars[3] = Convert.ToChar(0xf6);

// Convert the chars to a message string
string msg = new string(chars);

// Convert the setring to a byte array
byte[] data = Encoding.UTF8.GetBytes(msg);

// Get the local machines IP address
string Local_IP = GetIPAddress();

// Now create a broadcast UDP socket
Socket XmtSock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
XmtSock.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, 1);

IPEndPoint iep = new IPEndPoint(IPAddress.Parse(Local_IP), LantronixPort);

// Broadcast the packet
XmtSock.SendTo(data, 0, data.Length, SocketFlags.None, iep);

XmtSock.Close();

// Wait 500 mili seconds
int milliseconds = 500;
System.Threading.Thread.Sleep(milliseconds);

Socket RcvSock = new Socket(AddressFamily.InterNetwork,
SocketType.Dgram, ProtocolType.Udp);

iep = new IPEndPoint(IPAddress.Any, LantronixPort);

RcvSock.Bind(iep);

EndPoint ep = (EndPoint)iep;

Console.WriteLine("Ready to receive...");

byte[] data1 = new byte[120];

int recv = RcvSock.ReceiveFrom(data1, data1.Length, SocketFlags.None, ref ep);

string stringData = Encoding.ASCII.GetString(data1, 0, recv);

Console.WriteLine("received: {0} from: {1}",
stringData, ep.ToString());

RcvSock.Close();
}


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

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

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

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

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

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