Sockets WinRT写入TCP流不工作

Sockets WinRT写入TCP流不工作,sockets,tcp,windows-8,windows-runtime,Sockets,Tcp,Windows 8,Windows Runtime,我已经开始开发“WinRT”应用程序(“Metro”风格的Windows 8应用程序)。应用程序应该通过TCP流读取和写入一些数据。阅读很好,但写作不起作用。在下面,您可以找到使用完整.NET Framework的代码(可以正常工作): 相比之下,以下代码不起作用: var tcpClient = new StreamSocket(); await tcpClient.ConnectAsync(new HostName("192.168.178.51"), "60128"); var write

我已经开始开发“WinRT”应用程序(“Metro”风格的Windows 8应用程序)。应用程序应该通过TCP流读取和写入一些数据。阅读很好,但写作不起作用。在下面,您可以找到使用完整.NET Framework的代码(可以正常工作):

相比之下,以下代码不起作用:

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版本:

WinRT版本:


在调用writer.WriteString()之后,您需要通过调用writer.StoreAsync()实际提交缓冲区中现在的日期

对wrtier.WriteXX的任何调用都将只在内存中存储数据。调用writer.StoreAsync()后,将发送内存中的数据


我的猜测是StreamWrtiers.WriteLine在一次调用中就为您完成了这项工作。

如果同步执行相同的操作,会发生什么情况?WinRT不提供同步接口-异步是唯一的方法;)你看过StreamSocket的样品了吗?谢谢,就这样!通过示例中的注释,一切都很清楚:“向编写器写入数据只会将数据存储在内存中。”
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();