如何使用StreamSocket发送字符串?

时间:2014-12-08 00:12:50

标签: c# windows-runtime windows-phone windows-store-apps windows-phone-8.1

在我的Windows运行时应用中,我设置了一个这样的监听器:

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

但是浏览器会继续加载并在最后失败。

我测试了一个文件的流,但它返回了不可读的字符。

如何使用StreamSocket发送字符串?

1 个答案:

答案 0 :(得分: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是您要发送的HTML字符串(例如HTTP响应,当然填充了Content-Length)。

或者,使用System.Text.Encoding自己手动编码字符串,然后使用DataWriter.WriteBytes()方法发送字节。

当然要注意为WinRT编写HTTP服务器要多得多。您实际上应该使用连接事件来创建一些持久的客户端数据结构,您可以在其中保留您将用于I / O的任何对象,当然还有任何其他与客户端相关的状态。发送任何响应后,您还将启动您打算用于接收更多数据的任何机制。

不幸的是,与桌面.NET API不同,AFAIK WinRT API不提供HTTP服务器实现,例如比如System.Net.HttpListener。但是,如果您自己知道如何管理HTTP协议,那么一旦确定了处理I / O的其他细节,就应该没问题。