在我的Windows运行时应用中,我设置了一个这样的监听器:
StreamSocketListener streamSocketListener = new StreamSocketListener();
streamSocketListener.ConnectionReceived += streamSocketListener_ConnectionReceived;
await streamSocketListener.BindEndpointAsync(hostName, port);
但是浏览器会继续加载并在最后失败。
我测试了一个文件的流,但它返回了不可读的字符。
如何使用StreamSocket发送字符串?
答案 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的其他细节,就应该没问题。