2012-04-26 82 views
0

我正在開發Metro Client- Server應用程序,並在客戶端中使用StreamSocket連接到偵聽服務器。然後我嘗試使用StreamWriter將數據發送到服務器。問題是,當我創建新的StreamWriter對象時,我需要給他一個流參數。在我的情況下,我需要從StreamSocket給他Stream。這裏就是我所說的:如何從StreamSocket獲取流

private StreamWriter swSender; 


    private StreamSocket tcpServer; 

當試圖發送數據:

swSender = new StreamWriter(????); 
    swSender.WriteLine(mytext); 
    swSender.Flush(); 

????必須是來自tcpServer的Stream,但是沒有像舊版框架中的TcpClient()類那樣的GetStream()方法。任何解決方法?有任何想法嗎?先謝謝你。

回答

1

如果我沒有錯,他有的InputStream的OutputStream

然後

async private void WaitForData(StreamSocket socket) 
{ 
var dr = new DataReader(socket.InputStream); 
//dr.InputStreamOptions = InputStreamOptions.Partial; 
var stringHeader = await dr.LoadAsync(4); 
if (stringHeader == 0) 
{ 
    // disconnected 
    return; 
} 

int strLength = dr.ReadInt32(); 
uint numStrBytes = await dr.LoadAsync((uint)strLength); 
string msg = dr.ReadString(numStrBytes); 
WaitForData(socket); 
} 

編輯

因此,你需要像這樣

IBuffer buffer = CryptographicBuffer.ConvertStringToBinary(text, BinaryStringEncoding.Utf8); 
tcpServer.OutputStream.WriteAsync(buffer); 
+0

謝謝你的答案,但在你的代碼中,你正在等待來自服務器的響應,然後客戶端從服務器獲取消息。我的問題更多地涉及客戶向服務器發送信息的情況。這就是我試圖使用StreamWriter的原因。 – 2012-04-26 21:55:31

+0

@DimitarGyurov看看編輯部分 – Likurg 2012-04-27 06:04:17

+0

dr.ReadInt32()返回一個巨大的數字,並以OutOfMemoryException結尾 – 2012-12-11 09:22:31