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

相关问题