从UWP发送消息到socket.io

我有一个简单的节点socket.io服务器和一个C#UWP应用程序。 我想从应用程序发送简单的消息到服务器,但似乎消息不是在正确的格式/协议/东西。 我试图让格式正确,但我不知道该怎么做。

app.js

 io.on('connection', function(socket){ console.log('CLIENT CONNECTED') socket.on('message', function (msg) { console.log('socket msg') console.log(msg) } 

当我从socket.iotesting者发出消息时,控制台显示

 socket msg dwadwadwada 

(就像它应该)

debugging输出:

  engine:socket packet +1ms socket.io-parser decoded 2["message","dwadwadwada"] as {"type":2,"nsp":"/","data":["message","dwadwadwada"]} +0ms socket.io:socket got packet {"type":2,"nsp":"/","data":["message","dwadwadwada"]} +0ms socket.io:socket emitting event ["message","dwadwadwada"] +0ms socket.io:socket dispatching an event ["message","dwadwadwada"] +0ms 

现在,如果我从我的UWP应用程序发送一个string(为简洁起见删除了尝试/捕获和exception处理)

 string msg = "test"; await sendMessage(msg); private async Task sendMessage(string message) { this.socket = new MessageWebSocket(); socket.Control.MessageType = SocketMessageType.Utf8; socket.MessageReceived += socketMsgReceived; await this.socket.ConnectAsync(uri); Debug.WriteLine("CONNECTED TO " + uri); DataWriter messageWriter = new DataWriter(socket.OutputStream); messageWriter.WriteString(message); await messageWriter.StoreAsync(); } 

,消息发送(没有错误),服务器似乎得到的东西 ,但它不被认为是消息。

  engine:ws received "test" +6s engine:socket packet +1ms engine:ws closing +1ms socket.io:client client close with reason parse error +0ms socket.io:socket closing socket - reason parse error +1ms 

我尝试将消息格式化为{message = "test"}或甚至是42["message","test"] ,尽pipe后者至less给了我

  engine:ws received "42["message" = "test"]" +4s engine:socket packet +0ms socket.io-parser decoded 2["message" = "test"] as {"type":4,"data":"parser error"} +0ms socket.io:client no socket for namespace undefined +1ms 

我很确定这是一个简单的修复,但我只是不知道如何做到这一点..我必须将其转换为特殊types? JSON化它不知何故? 我不想要任何花哨的东西,只是发送一个

 {message: "hi"} 

或者也许(在第一个作品之后)

 {message: {text: "hi", additionalStuff: "ho"}} 

我会很感激任何帮助:)谢谢!

我发现了什么问题…

我真的不得不手动构buildwebsocketstring,因为(我怎么注意到)socket.io实际上与websocket不同,只是一个包装。

所以我不得不从头build立一个JSONstring从这里的信息。

我最后的string看起来像

  "42[\"mess\"," + "{\"id\": \"" + id + "\", " + "\"name\": \"" + name + "\"}]"; 

有很多逃脱的报价…我真的不明白为什么它是42而不是像文件说的消息,“4”,但我发现这是实际发送,所以我只是用它(它的工作原理)

上面的消息被parsing

 socket.on('mess', function(msg) { console.log(msg) } 

 {id: blah, name: bleh}