2017-10-18 39 views
0

我正在C#中的一个小项目中,我需要创建一个套接字客户端并观察json文件的套接字。WebSocketSharp试图打开套接字并读取传入的数据

我已经尝试了一些东西,我每次运行该项目时出现错误:

PM|Fatal|StackBuilderSink._PrivateProcessMessage|WebSocketSharp.WebSocketExceptio n: An exception has occurred while reading an HTTP request/response. ---> System.IO.EndOfStreamException: The header cannot be read from the data source.

一些背景。对于测试,我使用node.js和socket.io来读取Json文件并提交数据。我知道数据格式正确我有一个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(); 
    } 
} 
+0

我相信我的问题是我的测试服务器和这台服务器的活服务器不提供握手。有没有办法绕过握手,只听套接字饲料? – Jyeomans

回答

0

从你的描述我假设你通过io.emit发送普通的json文件。

的超文本传输​​协议(HTTP)预计如维基百科(HTTP response)中所述构建的输入反应:

The response message consists of the following:

  • A status line which includes the status code and reason message (e.g., HTTP/1.1 200 OK, which indicates that the client's request
    succeeded).
  • Response header fields (e.g., Content-Type: text/html).
  • An empty line.
  • An optional message body.

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

我假设还有一个node.js的库,它将作为一个web服务器并处理HTTP内容。


如果你想处理一个简单的数据流,没有一个协议,你不应该使用协议特定的套接字像WebSocket但一般人喜欢TcpListener

当然,你必须再解决,应该由当是一个信息/文件的末尾像一个协议来解决的问题的...如何使用的TcpListener和pitholes避免应提供

例子这里在stackoverflow或通过谷歌博士。

+0

所以我没有问题的是,在现场测试中提供json文件的服务器来自服务器,我不能改变。我只是建立了我的测试服务器来匹配。有没有办法只是看服务器的数据,而不需要形式?基本上我正在一个封闭的网络上使用数字标牌系统。我只是试图用我的系统中断数据流,并在数据馈送中给我用户一些控制权。 – Jyeomans

+0

@Jyeomans:作为对您评论的回应,扩展答案 –

相关问题