2

「WinRT」アプリ (Windows 8 用の「Metro」スタイルのアプリ) の開発から始めました。アプリは、TCP ストリームを介して一部のデータを読み書きする必要があります。読み取りは正常に機能しますが、書き込みは機能しません。以下に、完全な .NET Framework を使用するコードを示します (動作します)。

var client = new TcpClient();
client.Connect(IPAddress.Parse("192.168.178.51"), 60128);
var stream = client.GetStream();
var writer = new StreamWriter(stream);
writer.WriteLine("ISCP\0\0\0\x10\0\0\0.....");
writer.Flush();

比較すると、次のコードは機能しません。

var tcpClient = new StreamSocket();
await tcpClient.ConnectAsync(new HostName("192.168.178.51"), "60128");
var writer = new DataWriter(_tcpClient.OutputStream);
writer.WriteString("ISCP\0\0\0\x10\0\0\0....");
writer.FlushAsync();

WriteString は文字列の正しい長さ (25) を返しますが、相手側は正しいコマンドを受け取りません。Wireshark 経由で、完全な .NET バージョンの正しいパッケージも表示されますが、WinRT バージョンのパッケージは表示されません。

これを修正する方法は?

.NET バージョン:

.NET ネットワーク トラフィック

WinRT バージョン:

WinRT ネットワーク トラフィック

4

1 に答える 1

5

writer.WriteString() を呼び出した後、 writer.StoreAsync() を呼び出して、現在バッファーにある日付を実際にコミットする必要があります。

wrtier.WriteXX への呼び出しは、データをメモリに保存するだけです。writer.StoreAsync() を呼び出すと、メモリ内のデータが送信されます。

私の推測では、StreamWrtiers.WriteLine が 1 回の呼び出しでこれを実行します。

于 2012-10-12T18:14:39.983 に答える