【问题标题】:WebSocketSharp trying to open socket and read incoming dataWebSocketSharp 尝试打开套接字并读取传入数据
【发布时间】:2017-10-22 03:56:54
【问题描述】:

我正在使用 C# 开发一个小项目,我需要在其中创建一个套接字客户端并监视套接字中的 json 文件。

我尝试了一些方法,每次运行项目时都会出现错误:

PM|致命|StackBuilderSink._PrivateProcessMessage|WebSocketSharp.WebSocketExceptio n:读取 HTTP 请求/响应时发生异常。 ---> System.IO.EndOfStreamException:无法从数据源读取标头。

一些背景。为了测试,我使用 node.js 和 socket.io 来读取 Json 文件并 io.emit 数据。我知道数据格式正确我有一个 HTML/java 脚本页面,可以查看数据并对其进行处理。

public MainWindow()
{
    InitializeComponent();

    using (var ws = new WebSocket("ws://127.0.0.1:8889"))
    {
        ws.OnMessage += (sender, e) =>
              json_output.Text = (e.Data);

        ws.ConnectAsync();
    }
}

【问题讨论】:

标签: c# sockets


【解决方案1】:

根据您的描述,我假设您通过 io.emit 发送纯 json 文件。

超文本传输​​协议 (HTTP) 期望按照维基百科 (HTTP response) 中的描述构建响应:

响应消息包含以下内容:

  • 包含状态代码和原因消息的状态行(例如,HTTP/1.1 200 OK,表示客户端的请求
    成功)。
  • 响应标头字段(例如,Content-Type: text/html)。
  • 空行。
  • 可选消息正文。

因此你必须先发送状态行和响应头信息,然后是一个空行。之后,您可以将 json 文件的内容作为消息正文发送。

我假设还有一个 node.js 库,它可以用作 Web 服务器并处理 HTTP 内容。


如果您想处理没有协议的普通数据流,则不应使用WebSocket 之类的特定协议套接字,而应使用TcpListener 之类的通用套接字。

当然你必须解决应该由协议解决的问题,例如消息/文件何时结束......

有关如何使用 TcpListener 和避免坑洞的示例应该在 stackoverflow 上或通过 Google 博士提供。

【讨论】:

  • 所以我没有的问题是在实时测试中提供 json 文件的服务器来自我无法更改的服务器。我刚刚建立了我的测试服务器来匹配。有没有办法只观察服务器的数据而不需要手续?基本上我正在使用封闭网络上的数字标牌系统。我只是想用我的系统中断数据流,并让我的用户对数据馈送进行一些控制。
猜你喜欢
  • 1970-01-01
  • 2017-09-28
  • 1970-01-01
  • 2020-09-20
  • 2018-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多