2012-10-12 41 views
2

我已經開始開發「WinRT」應用程序(Windows版「Metro」風格的應用程序)。應用程序應該通過TCP流讀取和寫入一些數據。閱讀正常,但寫作不起作用。下面你可以找到它使用.NET Framework全(工作)代碼:WinRT寫入TCP流不起作用

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

+0

如果你同步做同樣的事情會發生什麼? –

+0

WinRT不提供同步接口 - 異步是唯一的方法;) – ollifant

+0

你看過StreamSocket示例了嗎? –

回答

5

您的來電writer.WriteString(),你需要真正承諾,現在是在此日期之後緩存通過調用writer.StoreAsync()

任何調用wrtier.WriteXX將只存儲數據記憶。一旦你調用writer.StoreAsync(),內存中的數據將被髮送。

我的猜測是StreamWrtiers.WriteLine會在一次調用中爲您做到這一點。

+0

謝謝,就是這樣!從樣本中得到的評論都很清楚:「將數據寫入寫入器只會將數據存儲在內存中。」 – ollifant