我正在尝试通过WinRT / C#中的DatagramSockets接收广播,但我只是没有收到数据包。
更具体地说,这是我的代码:
public sealed partial class MainPage : Page
{
public MainPage(){
this.InitializeComponent();
}
private DatagramSocket listener;
async private void Loaded(object sender, RoutedEventArgs e) {
listener = new DatagramSocket();
listener.MessageReceived += MessageReceived;
await listener.BindServiceNameAsync("50011");
}
private void MessageReceived(DatagramSocket sender, DatagramSocketMessageReceivedEventArgs args) {
txtText.Text = "Win :D:D:D:D:D:D:D"; //Breakpoint here
}
}
程序永远不会到达断点。 我已经在appxmanifest中设置了所有正确的权限/权限。 发送广播的节目如下:
static void Main(string[] args) {
Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
sock.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, 1);
IPEndPoint iep = new IPEndPoint(IPAddress.Broadcast, 50011);
string hostname = Dns.GetHostName();
byte[] data = new byte[1];
data[0] = 129;
while (true) {
sock.SendTo(data, iep);
Console.WriteLine("Daten gesendet: {0}", data[0]);
Thread.Sleep(1000);
}
}
我知道这个程序有效,因为我在同一台PC上用另一个小C#程序测试它(但不是WinRT功能,只是普通的C#)。此外,它不能是防火墙或路由问题,因为正如我刚才提到的,它已经使用了普通的C#程序(但我已经尝试关闭防火墙)。
我目前正在使用Windows 8.1和具有x64处理器的Wifi网络上进行尝试。 我错过了什么吗?它甚至可能吗?
我希望你们中的某些人可以帮助我
(PS:我知道它与这篇文章很相似:Can't Receive UDP Windows RT但是一年多来没有取得进展所以......)
答案 0 :(得分:3)
我解决了。 您只需从其他设备发送广播即可。 但是,它不喜欢从同一台设备发送的广播....