sockets - WinRT 写入 TCP 流不起作用

标签 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();

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

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 network traffic

WinRT 版本:

WinRT network traffic

最佳答案

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

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

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

关于sockets - WinRT 写入 TCP 流不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12861716/

相关文章:

ios - Swift 套接字

networking - IM 应用程序如何设法让用户在不同 LAN 之间传输文件

c# - TCP 连接断开/或无法通过 TCP 接收数据

.net - WinRT、Javascript 和随机 "Access denied"异常

c# - Metro 应用程序的 C# Visual Studio 11 中的事件处理程序错误

c++ - 简单的 C/C++ 网络 I/O 库

c++ - 套接字 - 使用选择超时

c - 仅 GET 命令正文,缺少 header

sockets - 为什么TCP套接字编程需要两个套接字(一个欢迎套接字和一个连接套接字)而UDP只需要一个?

windows-8 - 有没有办法查看 Windows 8 设备是否连接了物理键盘?