WinRT写入TCP流不起作用

oll*_*ant 2 sockets tcp windows-8 windows-runtime

我已经开始开发"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();
Run Code Online (Sandbox Code Playgroud)

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

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();
Run Code Online (Sandbox Code Playgroud)

WriteString返回字符串的正确长度(25),但另一端没有收到正确的命令.通过Wireshark我也看到了完整.NET版本的正确软件包,但WinRT版本没有.

如何解决这个问题?

.NET版本:

.NET网络流量

WinRT版本:

WinRT网络流量

小智 5

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

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

我猜测StreamWrtiers.WriteLine会在一次调用中为您完成此操作.