2017-10-18 1 views
0

Ich arbeite an einem kleinen Projekt in C#, wo ich einen Socket-Client erstellen und den Socket für eine JSON-Datei überwachen muss.WebSocketSharp versucht Socket zu öffnen und eingehende Daten zu lesen

Ich habe ein paar Sache versucht, und jedes Mal, wenn ich das Projekt ausführen bekomme ich den Fehler:

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.

Einige Hintergrundinformationen. Zum Testen verwende ich node.js mit socket.io, um eine JSON-Datei zu lesen und die Daten zu übertragen. Ich weiß, dass die Daten korrekt formatiert sind. Ich habe eine HTML/Java-Skriptseite, die die Daten sieht und mit ihnen arbeitet.

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

Ich glaube, dass das Problem mein sein wird, dass mein Test-Server und der Live-Server, mit denen es arbeiten wird, keinen Handshake bietet. Gibt es eine Möglichkeit, den Handshake zu umgehen und nur auf den Socket-Feed zu hören? – Jyeomans

Antwort

0

Aus Ihrer Beschreibung Ich gehe davon aus, dass Sie die Ebene json-Datei durch io.emit senden.

Der Hypertext Transport Protocol (HTTP) erwartet, dass die respone gebaut wie in wikipedia beschrieben (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.

Daher müssen Sie zuerst die Statuszeile und Antwort-Header-Informationen senden, durch eine Leerzeile gefolgt. Danach können Sie den Inhalt der JSON-Datei als Nachrichtentext senden.

Ich nehme an, es gibt auch eine Bibliothek für node.js, die als Webserver arbeiten und das HTTP-Zeug behandeln wird.


Wenn Sie einen einfachen Datenstrom ohne Protokoll zu handhaben möchten, sollten Sie keine protokollspezifische Buchse wie WebSocket aber eine generische wie TcpListener verwenden.

Natürlich können Sie dann die Probleme zu lösen, die wie durch ein Protokoll gelöst werden soll, wenn das Ende einer Nachricht/Datei ...

Beispiele, wie TcpListener und pitholes verwenden sollte zu vermeiden verfügbar sein hier auf stackoverflow oder über Dr. Google.

+0

Also das Problem, das ich nicht habe, ist, dass der Server, der die JSON-Datei im Live-Test zur Verfügung stellt, von einem Server kommt, den ich nicht ändern kann. Ich habe meinen Testserver nur so aufgebaut, dass er dazu passt. Gibt es eine Möglichkeit, nur den Server für die Daten zu beobachten und nicht die Formalität? Grundsätzlich arbeite ich mit einem Digital Signage System in einem geschlossenen Netzwerk. Ich versuche nur, den Datenfluss mit meinem System zu unterbrechen und gab dem Benutzer eine Kontrolle im Datenfeed. – Jyeomans

+0

@Jyeomans: erweiterte Antwort als Antwort auf Ihren Kommentar –

Verwandte Themen