gpt4 book ai didi

c# - 使用 C# 套接字发现 Lantronix XPort Pro 和 XPort

转载 作者:行者123 更新时间:2023-11-30 23:01:02 25 4
gpt4 key购买 nike

我正在尝试使用 C# 在网络上查找 Lantronix XPort Pro 设备。我正在使用在 Lantronix 开发者维基上找到的一些 python 代码作为示例 http://wiki.lantronix.com/developer/Lantronix_Discovery_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();
}

最佳答案

Lantronix 的 wiki 目前似乎已关闭,所以我暂时无法查看。但是,查看您的代码,您似乎必须广播一条 UDP 消息,等待一段时间,然后检查是否有任何东西响应了该消息。

但是,看起来您正在创建一个全新的套接字来接收响应,但只是在半秒之后。很可能任何要响应的 X 端口在此之前已经完成了很长时间(网络很快,X 端口不是很慢,等等)。所以我估计响应正在影响你的操作系统的网络堆栈,它说“好吧,我不知道它应该去哪里”,并且仅在半秒之后你才创建一个适合接收操作系统网络堆栈的响应的套接字已经作为未知垃圾丢弃。

所以我建议稍微移动一下。在传输广播消息之前设置接收套接字、绑定(bind)和端点,以便准备好等待响应。看看是否有帮助。

关于c# - 使用 C# 套接字发现 Lantronix XPort Pro 和 XPort,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51270578/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com