【发布时间】:2018-05-31 10:19:07
【问题描述】:
- 我正在使用 Xamarin.forms 和 .net Standard 2 为共享代码编写 UWP 和 Android 应用程序。
- 我正在尝试从两个应用程序发送和接收 UPD 广播,但问题是我只能从 android 应用程序按预期发送和接收,而 UWP 应用程序无法接收 UDP 广播数据包?
- 我在windows上安装了wireshark,它可以接收来自两个应用程序的所有包。
- 我为我的 app.uwp.exe 添加了防火墙规则(允许任何网络、任何端口、任何协议、任何 ip)我重新启动了电脑,但我的 UWP 应用仍然无法从 android 应用接收。
代码:
using System.Threading.Tasks;
using Xamarin.Forms;
using Xamarin.Forms.Xaml;
using System.Net.Sockets;
using System.Net;
[XamlCompilation(XamlCompilationOptions.Compile)]
public partial class ItemsPage : ContentPage
{
public async static Task<String> UDP_receive()
{
var myUDP = new UdpClient(8888);
myUDP.EnableBroadcast = true;
var myResult = await myUDP.ReceiveAsync();
myUDP.Close();
return Encoding.ASCII.GetString(myResult.Buffer) + " : " + myResult.RemoteEndPoint.Address.ToString();
}
public async static Task UDP_Send()
{
var myUDP = new UdpClient();
var RequestData = Encoding.ASCII.GetBytes(DateTime.Now.ToLongTimeString());
myUDP.EnableBroadcast = true;
await myUDP.SendAsync(RequestData, RequestData.Length, new IPEndPoint(IPAddress.Broadcast, 8888));
myUDP.Close();
}
void Button1_click(object sender, EventArgs e)
{
StartListen();
StartSending();
}
async Task StartListen()
{
Exception eXX = null;
while (eXX == null)
{
try
{
myText.Text += Environment.NewLine + await UDP_receive();
}
catch (Exception ex2)
{
eXX = ex2;
log(ex2);
}
}
}
async Task StartSending()
{
Exception eXX = null;
while (eXX == null)
{
try
{
await MyData.UDP_Send();
await Task.Delay(1000);
}
catch (Exception ex2)
{
eXX = ex2;
log(ex2);
}
}
}
}
Android 输出:
上午 11:57:11 : 192.168.1.155
上午 11:57:11:192.168.1.100
上午 11:57:12 : 192.168.1.155
上午 11:57:12:192.168.1.100
上午 11:57:13 : 192.168.1.155
上午 11:57:13:192.168.1.100
....
注意:192.168.1.100 是 Windows PC IP
UWP 输出:
上午 11:57:11 : 192.168.1.100
上午 11:57:12 : 192.168.1.100
上午 11:57:13 : 192.168.1.100
上午 11:57:14 : 192.168.1.100
上午 11:57:15 : 192.168.1.100
....
【问题讨论】:
-
你有一个表单项目,不需要阻塞,因为它是表单构造函数中的一个内置块。所以删除等待(不需要)。同时删除 myUDP.Close();看起来当您收到第一个数据时,您正在关闭连接。
-
感谢您的努力,我尝试了您的建议,但没有解决我的问题。我的 UWP 已经收到它发送的数据,但是它没有收到 android 发送的数据。
-
可能有其他应用程序在使用该端口号,或者它可能被防火墙或病毒检查程序阻止。我会使用 cmd.exe >Netstat -a 并检查端口号是否已被使用。端口号是已注册的事件,除非在组(通常是多播组)中注册,否则端口号的事件列表中的第一个应用程序会获取消息。但是您没有使用多播 IP(224 到 239)。
-
UWP 在访问 8888 端口时接收到它的 UDP 广播数据包,但是 android 应用程序同时接收到它的数据包和 UWP 的数据包
-
@jdweng ,当我运行 Netstat -a 我得到:UDP 0.0.0.0:8888 仅当我的 UWP 运行时
标签: c# xamarin.forms uwp broadcast udpclient