UDP経由で接続されたアプリにデータを転送する必要があるWP8プロジェクトに取り組んでいます(WP8も)。Windows 8 とコードを共有できるように、DatagramSocket を使用することにしました。
サーバーとクライアント アプリは相互に接続できます。クライアントがサーバーに接続した後、それに応じてサーバーに応答するコマンドを送信します。クライアント接続とコマンド送信コードは次のようになります。
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、Bluetooth、およびNFCを実行しましたが、すべてが機能しており、同様のコードがあります。しかし、UDPは私を夢中にさせます...
お時間をいただきありがとうございます。