如何从远程 UDP 套接字获取信息? C# 和 IPv4
How to get information from a remote UDP socket? C# & IPv4
我的硬件以大约 5 秒的间隔向地址 192.168.0.255 发送信息(在下图中,Wireshark 软件显示 IP 地址为 192.168.0.241 的设备将消息“Hallo”发送到端口 7000 上的地址 192.168.0.255:
另一方面,我有一个用 C# 制作的桌面应用程序,它试图按如下方式读取该信息:
int PORT = 7000;
udpClient = new UdpClient();
udpClient.Client.Bind(new IPEndPoint(IPAddress.Any, PORT));
private async Task<string> getData()
{
try
{
var from = new IPEndPoint(0, 0);
while (true)
{
var recvBuffer = udpClient.Receive(ref from);
string result= Encoding.UTF8.GetString(recvBuffer);
if (result != null && resultado.Length > 0)
{
return result;
}
}
}
...
}
它不起作用(udpClient.Receive 从来没有 returns 信息,这类似于还没有套接字信息),但是如果我从我的电脑上打开一个软件工具,它允许我将信息写入 UDP scoket,代码运行良好(udpClient.Receive 捕获发送的信息。)
有什么建议或意见吗?
UdpClient client;
IPEndPoint endPoint = new IPEndPoint(IPAddress.Any, PORT);
private void Connect()
{
client = new UdpClient(7000);
client.Connect(endPoint);
client.BeginReceive(ReceiveCallback, null);
}
private void ReceiveCallback(IAsyncResult _result)
{
try
{
byte[] _data = client.EndReceive(_result, ref endPoint);
socket.BeginReceive(ReceiveCallback, null);
if (_data.Length < 4)
{
//disconnected
return;
}
//now data is anything received and if you want to view it as a string do:
string result = Encoding.Default.GetString(data);
//you can also convert it to other things like ints, float, etc
}
catch
{
//disconnected
}
}
感谢@MarkusSafar 的建议,我将桌面应用程序放在另一台 PC 上,它设法从那里捕获硬件消息。我不确定为什么它不能在我的电脑上运行,但下一步是测试为 Android (Xamarin) 开发的应用程序的相同代码,我希望它也能在那里运行。
我的硬件以大约 5 秒的间隔向地址 192.168.0.255 发送信息(在下图中,Wireshark 软件显示 IP 地址为 192.168.0.241 的设备将消息“Hallo”发送到端口 7000 上的地址 192.168.0.255:
另一方面,我有一个用 C# 制作的桌面应用程序,它试图按如下方式读取该信息:
int PORT = 7000;
udpClient = new UdpClient();
udpClient.Client.Bind(new IPEndPoint(IPAddress.Any, PORT));
private async Task<string> getData()
{
try
{
var from = new IPEndPoint(0, 0);
while (true)
{
var recvBuffer = udpClient.Receive(ref from);
string result= Encoding.UTF8.GetString(recvBuffer);
if (result != null && resultado.Length > 0)
{
return result;
}
}
}
...
}
它不起作用(udpClient.Receive 从来没有 returns 信息,这类似于还没有套接字信息),但是如果我从我的电脑上打开一个软件工具,它允许我将信息写入 UDP scoket,代码运行良好(udpClient.Receive 捕获发送的信息。)
有什么建议或意见吗?
UdpClient client;
IPEndPoint endPoint = new IPEndPoint(IPAddress.Any, PORT);
private void Connect()
{
client = new UdpClient(7000);
client.Connect(endPoint);
client.BeginReceive(ReceiveCallback, null);
}
private void ReceiveCallback(IAsyncResult _result)
{
try
{
byte[] _data = client.EndReceive(_result, ref endPoint);
socket.BeginReceive(ReceiveCallback, null);
if (_data.Length < 4)
{
//disconnected
return;
}
//now data is anything received and if you want to view it as a string do:
string result = Encoding.Default.GetString(data);
//you can also convert it to other things like ints, float, etc
}
catch
{
//disconnected
}
}
感谢@MarkusSafar 的建议,我将桌面应用程序放在另一台 PC 上,它设法从那里捕获硬件消息。我不确定为什么它不能在我的电脑上运行,但下一步是测试为 Android (Xamarin) 开发的应用程序的相同代码,我希望它也能在那里运行。