Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/466.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Javascript中通过WebSocket发送和接收数据包_Javascript_Websocket - Fatal编程技术网

如何在Javascript中通过WebSocket发送和接收数据包

如何在Javascript中通过WebSocket发送和接收数据包,javascript,websocket,Javascript,Websocket,我想将数据从Javascript发送到WebSocket服务器,并将从WebSocket服务器发送到Javascript 我想寄这个: Headers ------- Field 1: 2 byte hex Field 2: 2 byte hex Field 3: 4 byte hex Data ---- Field1 : 2 byte hex Field1 : 8 byte hex 通过Javascript,我可以通过 socket = new WebSocket(host); ... s

我想将数据从Javascript发送到WebSocket服务器,并将从WebSocket服务器发送到Javascript

我想寄这个:

Headers
-------
Field 1: 2 byte hex
Field 2: 2 byte hex
Field 3: 4 byte hex

Data
----
Field1 : 2 byte hex
Field1 : 8 byte hex
通过Javascript,我可以通过

socket = new WebSocket(host);
...
socket.send(0xEF);
但我想同时发送多个字段……比如0xEF、0x60和0x0042

我该怎么做


还有,如何通过包含来自WebSocket服务器的多个字段的Javascript数据进行解释?

您可以将数据作为字符串发送。例如:

socket.send("hello world");

我建议您使用JSON作为数据格式。您可以将JSON字符串直接转换为对象,反之亦然。它是如此简单和有用

听起来像是在问如何通过WebSocket连接发送二进制数据

这里主要回答了这个问题:

回答中未包含的一些额外信息:

当前的WebSocket协议和API只允许发送字符串(或任何可以强制/类型转换为字符串的内容),接收的消息都是字符串。该协议的下一次迭代(HyBi-07)支持二进制数据,目前正在浏览器中实现


Javascript字符串是UTF-16,内部每个字符有2个字节。当前WebSockets有效负载仅限于UTF-8。在UTF-8中,128以下的字符值需要1字节进行编码。值128及以上需要2个或更多字节进行编码。当您发送Javascript字符串时,它将从UTF-16转换为UTF-8。要发送和接收二进制数据(直到协议和API本机支持它),您需要将数据编码为与UTF-8兼容的内容。例如,base64。这在上面链接的答案中有更详细的介绍。

您可以将数据作为JSON对象发送

 socket.send(JSON.stringify({field1:'0xEF', field2:'0x60',field3: '0x0042'}));

+关于“Javascript字符串是UTF-16,内部每个字符有2个字节”,你有来源吗?它不依赖于文件本身的编码吗?@Pacerier:browser/javascript引擎内部的字符串编码不依赖于javascript源代码编码。内部字符串为UTF-16。这里的信息比您想要的更多: