0

在我的Windows運行的應用程序,我設置了這樣的監聽器:如何使用StreamSocket發送字符串?

StreamSocketListener streamSocketListener = new StreamSocketListener(); 
streamSocketListener.ConnectionReceived += streamSocketListener_ConnectionReceived; 
await streamSocketListener.BindEndpointAsync(hostName, port); 

但是,瀏覽器會加載,並在年底失效。

我測試了一個文件的流並返回了不可讀的字符。

如何使用StreamSocket發送字符串?

回答

1

的正確答案您的具體問題是,你的連接事件處理程序應該是這個樣子:

private async void streamSocketListener_ConnectionReceived(
    StreamSocketListener sender, StreamSocketListenerConnectionReceivedEventArgs args) 
{ 
    DataWriter writer = new DataWriter(args.Socket.OutputStream); 

    writer.WriteString(responseHtml); 
    await writer.StoreAsync(); 
    await writer.FlushAsync(); 
} 

哪裏responseHtml是您要發送(如HTTP響應的HTML字符串,與Content-Length填充當然)。

或者,使用System.Text.Encoding自己手動編碼字符串,然後使用DataWriter.WriteBytes()方法代替發送字節。

當然要注意,爲WinRT編寫HTTP服務器還有很多。實際上,您應該使用連接事件來創建一些持久客戶端數據結構,您可以在其中保留您將用於I/O的任何對象,當然還有其他任何與客戶端相關的狀態。在發送任何響應之後,您還將啓動您打算用來接收更多數據的任何機制。

不幸的是,與桌面.NET API不同,AFAIK WinRT API不提供HTTP服務器實現,例如,像System.Net.HttpListener。但是如果你知道如何自己管理HTTP協議,那麼一旦你確定了處理I/O的其他細節,你應該沒問題。

+0

不要忘記調用DataWriter.FlushAsyn()。 – kiewic 2014-12-08 00:58:50

+0

謝謝,是的......我只是試圖展示基本想法,但至少有一些其他方法調用要做。我會編輯答案。 – 2014-12-08 01:27:58

+0

@kiewic感謝彼得。我更新了我的問題,但現在瀏覽器不斷加載,並且它沒有得到字符串。我的Content-Length值錯了嗎?我的主要目標是共享文件 – user3293835 2014-12-08 01:50:15