【问题标题】:UDP broadcast send not working in UWPUDP广播发送在UWP中不起作用
【发布时间】:2015-11-24 12:04:16
【问题描述】:

我尝试使用基于this source code 的 UWP 创建一个 UDP 发送和侦听应用程序。

它应该像这样工作:

  • 在 8080 端口监听消息
  • 向广播地址发送消息
  • 从另一个侦听发送到广播的消息的 UDP 服务器接收消息

我有ListenSend 方法。

构造函数

public MainViewModel()
{
   Listen();
   Send();
}

private async void Listen()
    {
      listenerSocket = new DatagramSocket();
      listenerSocket.MessageReceived += (x, y) =>
      {
        var a = "2";
      };
      await listenerSocket.BindServiceNameAsync("8080");
    }

发送

private async void Send()
    {
      IOutputStream outputStream;
      string localIPString = GetLocalIp();
      IPAddress localIP = IPAddress.Parse(localIPString);
      string subnetMaskString = "255.0.0.0";
      IPAddress subnetIP = IPAddress.Parse(subnetMaskString); 
      HostName remoteHostname = new HostName(GetBroadcastAddress(localIP, subnetIP).ToString());
      outputStream = await listenerSocket.GetOutputStreamAsync(remoteHostname, "8080");      
      DataWriter writer = new DataWriter(outputStream);
      writer.WriteString(localIPString);
      await writer.StoreAsync();
    }

广播好像发送不通了。

我有另一个程序(用 Java 编写)也向广播地址发送消息,此侦听器接收从广播发回的消息。

我应该设置什么才能使发送工作?

【问题讨论】:

  • 您能发布您的GetBroadcastAddress(localIP, subnetIP) 代码吗?我认为问题可能出在这里,我测试了您的代码,但改为使用本地地址,并且有效。

标签: c# sockets uwp


【解决方案1】:

我在这里没有看到任何GetBroadcastAddress(localIP, subnetIP) 代码。但正如我所见,您的问题可能与此代码有关:

HostName remoteHostname = new HostName(GetBroadcastAddress(localIP, subnetIP).ToString());

我改成:

    HostName remoteHostname = new HostName(localIP.ToString());
    outputStream = await listenerSocket.GetOutputStreamAsync(remoteHostname, port);

这是我的示例代码:

public sealed partial class MainPage : Page
{
    DatagramSocket listenerSocket = null;
    const string port = "8080";
    public MainPage()
    {
        this.InitializeComponent();
        Listen();
        Send();
    }


private async void Listen()
{
    listenerSocket = new DatagramSocket();
    //listenerSocket.MessageReceived += (x, y) =>
    //{
    //    var a = "2";
    //};
    listenerSocket.MessageReceived += MessageReceived;
    await listenerSocket.BindServiceNameAsync(port);
}

private async void Send()
{
    IOutputStream outputStream;
    string localIPString = GetLocalIp();
    IPAddress localIP = IPAddress.Parse(localIPString);
    string subnetMaskString = "255.0.0.0";
    IPAddress subnetIP = IPAddress.Parse(subnetMaskString);
    HostName remoteHostname = new HostName(localIP.ToString());
    outputStream = await listenerSocket.GetOutputStreamAsync(remoteHostname, port);

    using (DataWriter writer = new DataWriter(outputStream))
    {
        writer.WriteString("aaaa");
        await writer.StoreAsync();
    }


}

//private object GetBroadcastAddress(IPAddress localIP, IPAddress subnetIP)
//{
//    throw new NotImplementedException();
//}

async void MessageReceived (DatagramSocket socket, DatagramSocketMessageReceivedEventArgs args)
{
    DataReader reader = args.GetDataReader();
    uint len = reader.UnconsumedBufferLength;
    string msg = reader.ReadString(len);

    string remoteHost = args.RemoteAddress.DisplayName;
    reader.Dispose();

    await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
    {
        text.Text = msg;
    });

}

private string GetLocalIp()
{
   ...
}

}

【讨论】:

    猜你喜欢
    • 2012-11-09
    • 1970-01-01
    • 1970-01-01
    • 2016-07-26
    • 2019-06-17
    • 1970-01-01
    • 1970-01-01
    • 2014-06-23
    • 1970-01-01
    相关资源
    最近更新 更多