【发布时间】:2013-01-13 12:44:45
【问题描述】:
我正在开发一个 WP8 项目,该项目应该通过 UDP 将数据传输到连接的应用程序(WP8 也是)。我决定使用 DatagramSocket 来与 Windows 8 共享代码。
服务器和客户端应用程序可以相互连接。在客户端连接到服务器后,它会发送一个命令,该命令应该相应地回答服务器。客户端连接和命令发送代码如下:
var stream = await _udpSocket.GetOutputStreamAsync(server, UdpCommunication.Port);
var writer = new DataWriter(stream);
writer.UnicodeEncoding = UnicodeEncoding.Utf8;
uint messageSize = writer.MeasureString(UdpCommunication.ReceiveImageCommand);
writer.WriteUInt32(messageSize);
await writer.StoreAsync();
writer.WriteString(UdpCommunication.ReceiveImageCommand);
await writer.StoreAsync();
await writer.FlushAsync();
所以我将传输消息大小,然后是字符串命令名称。到目前为止一切顺利。
服务器从 DatagramSocket 接收 MessageReceived 事件,我让 DataReader 和 trz 读取 4 bztes。在调用它时,我收到以下异常消息: “操作标识符无效。” (hresult -2147020579)
MessageReceived 事件的代码:
DataReader reader = args.GetDataReader();
reader.UnicodeEncoding = UnicodeEncoding.Utf8;
await reader.LoadAsync(4);
uint messageSize = reader.ReadUInt32();
await reader.LoadAsync(messageSize);
string message = reader.ReadString(messageSize);
有没有人知道为什么会抛出这个异常以及如何修复它?我已经完成了 TCP、蓝牙和 NFC,并且都在工作并且有类似的代码。但是 UDP 让我抓狂...
感谢您的宝贵时间和帮助!
【问题讨论】:
-
我讨厌成为坏消息的暴露者,所以只是评论。但是您在这里违反了沙盒限制。不允许进程相互通信。本地环回是一种典型的恶意软件技术。您可以仅出于测试目的暂时禁用它,但您无法通过商店获得它。抱歉,这势必会给你的计划造成一个巨大的漏洞。
-
通信发生在两个设备之间。所以你的观点不应该适用于我的情况,但很高兴知道。
标签: c# udp windows-runtime windows-phone-8