2017-05-12 4 views
1

Ich habe einen einfachen TCP-Server in C# geschrieben, Ping-out-Daten in einem bestimmten Intervall und die Daten erhalten, die ich eine NodeJS-App habe.NetworkStream write() mit Ereignisname

Ich bin Strom, um die Daten von einem NetworkStream wie so zu senden:

private NetworkStream nwStream; 
nwStream = clientMachine.GetStream(); 

nwStream.Write(buffer, 0, buffer.Length); // Inside a loop 

Und es in NodeJS wie Empfang:

client.on('data', (data) => {

Gibt es eine Möglichkeit, eine andere Veranstaltung zu emittieren, anders als data von meinem C# TCP-Server? Mit Socket.io kann ich socket.emit('customEvent', someData) und bekomme es wie socket.on('customEvent', receivedData), aber ich bin mir nicht sicher, ob ich das in C# erreichen kann.

Ich arbeite nicht mit Socket.io, das obige ist nur ein Beispiel für das Verhalten, das ich erreichen möchte.

+0

Wenn Sie mit socket.io sprechen, müssen Sie das Protokoll socket.io beachten: https://github.com/socketio/socket.io-protocol - vermutlich, dass Sie erfahren, wie Sie benutzerdefinierte Ereignisse codieren Namen –

+0

Ich spreche nicht mit Socket, das war nur ein Beispiel für das Verhalten, das mir bekannt ist. Ich verwende einen 'NetworkStream' in C# und einen' net.Socket() 'in Node. –

+0

Wenn Sie Raw-Sockets an beiden Enden verwenden, müssen Sie nur Ihr eigenes Protokoll entwerfen, das einen Namen in jeden logischen Rahmen einbettet ... TCP-Sockets selbst haben keinen solchen Mechanismus, noch rohe Pakete –

Antwort

1

Wenn Sie Raw-Sockets an beiden Enden verwenden, müssen Sie nur Ihr eigenes Protokoll entwerfen, das einen Namen in jeden logischen Rahmen einbettet ... TCP-Sockets selbst haben keinen solchen Mechanismus, auch nicht roh Pakete.

Eine typische/einfache Art und Weise, dies zu tun könnte so etwas wie sein:

{Event name, UTF8}\r\n{length, 4 bytes little endian integer}{payload, length bytes} 

Wenn Ihre Veranstaltung Name könnte Newline/Linefeed enthält, dann werden Sie die Nutzlast Länge/Nutzlast-Ansatz für das Ereignis verwenden müssen Name auch.

1

Socket.IO hat ein eigenes Netzwerkprotokoll here. Die Funktion encodeAsString(obj) in 'socket.io-parser' ist möglicherweise das, wonach Sie suchen.

Verwandte Themen