通过套接字从c#发送数据到节点的socket.io服务器

我目前正在尝试用我的C#客户端提供的数据来提供socket.io服务器。 但是我不确定如何在服务器上接收消息。

我的服务器代码:

const io = require('socket.io')(9000); io.on('connection', (socket) => { console.log('Connected'); } 

首先,我不知道我要听哪个事件,但是我无法使用以下客户端(使用Websocket-sharp)将数据发送到我的服务器:

 private void init() { // start socket connection using (var ws = new WebSocket("ws://localhost:9000/socket.io/?EIO=2&transport=websocket")) { ws.OnMessage += (sender, e) => API.consoleOutput("Message: " + e.Data); ws.OnError += (sender, e) => API.consoleOutput("Error: " + e.Message); ws.Connect(); ws.Send("server"); } } 

连接工作,但我怎么接收服务器的消息? 发送不会引发错误,因此我认为它确实有效。

我已经得到这个连接到一个node.js服务器的UWP应用程序的工作。 基本上我所做的就是连接到一个类似于ws://localhost:4200/socket.io/?EIO=3&transport=websocket的URL

端口号是我们select的东西。

一旦设置,我通过以下几行代码连接到node.js socket io库。

 private async Task ConnectWebsocket() { websocket = new MessageWebSocket(); Uri server = new Uri(WebSocketURI); //like ws://localhost:4300/socket.io/?EIO=3&transport=websocket websocket.Control.MessageType = SocketMessageType.Utf8; websocket.MessageReceived += Websocket_MessageReceived; websocket.Closed += Websocket_Closed; try { await websocket.ConnectAsync(server); isConnected = true; writer = new DataWriter(websocket.OutputStream); } catch ( Exception ex ) // For debugging { // Error happened during connect operation. websocket.Dispose(); websocket = null; Debug.Log("[SocketIOComponent] " + ex.Message); if ( ex is COMException ) { Debug.Log("Send Event to User To tell them we are unable to connect to Pi"); } return; } } 

`

在这一点上你的套接字“连接”io应该在你的服务器上触发

那么你可以像往常一样发射事件。 除了C#套接字代码不区分各种渠道,所以你必须自己做。 下面是我们如何做到的(也就是SocketData和SocketIOEvent是我们定义的类)

 private void Websocket_MessageReceived(MessageWebSocket sender, MessageWebSocketMessageReceivedEventArgs args) { try { using ( DataReader reader = args.GetDataReader() ) { reader.UnicodeEncoding = UnicodeEncoding.Utf8; try { string read = reader.ReadString(reader.UnconsumedBufferLength); //read = Regex.Unescape(read); SocketData socc = SocketData.ParseFromString(read); if (socc != null ) { Debug.Log(socc.ToString()); SocketIOEvent e = new SocketIOEvent(socc.channel, new JSONObject( socc.jsonPayload)); lock ( eventQueueLock ) { eventQueue.Enqueue(e); } } } catch ( Exception ex ) { Debug.Log(ex.Message); } } } catch (Exception ex ) { Debug.Log(ex.Message); } } 

在我们的具体应用中,我们不需要发送消息到我们的服务器,所以我没有一个很好的答案。