【发布时间】:2011-08-08 14:41:11
【问题描述】:
我想从手机发送一个 UDP 数据包到有限的广播地址 (IPAddress.Broadcast = 255.255.255.255)。
这是我目前所拥有的,它适用于 Windows 应用程序:
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, true);
byte[] data = Encoding.UTF8.GetBytes("test data");
SocketAsyncEventArgs a = new SocketAsyncEventArgs();
a.RemoteEndPoint = new IPEndPoint(IPAddress.Broadcast, 11000);
a.SetBuffer(data, 0, data.Length);
a.Completed += new EventHandler<SocketAsyncEventArgs>(delegate(object s, SocketAsyncEventArgs e)
{
Console.WriteLine(e.SocketError);
});
socket.SendToAsync(a);
需要调用 SetSocketOption 以防止“访问被拒绝”异常。不幸的是,该方法在 WP7 上似乎不可用。 App Hub 社区站点上给出的 UDP 示例代码使用多播来实现类似的结果,但我尝试联系的设备无法处理多播。
有没有办法在 Mango 上做这种广播?
【问题讨论】:
-
我在代码中添加了一个 Completed 事件以允许检查显示 AccessDenied 的 SocketError。如果您将其更改为执行正常(非异步)套接字调用,而忽略 SetSocketOption 调用,您将获得 AccessDenied 异常。但是你只能在 Mango 中获得异步调用。
标签: c# windows-phone-7