2017-10-18 75 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:作爲對您評論的迴應,擴展答案 –

相關問題