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 在一次调用中为您完成此操作。

于 2012-10-12T18:14:39.983 回答