1 const dgram = require("dgram");
2 const server = dgram.createSocket("udp4");
3 
4 server.on("message", (msg, rinfo) => {
5     log.info("recv %s(%d bytes) from client %s:%d", msg, msg.length, rinfo.address, rinfo.port);
6 });

项目编码为utf8

如上代码,msg.length指的是字节数, message来自node.js的buffer缓存区

当messgae里面含有中文时,会损失 中文字数*2 的字节数,原因在于项目将信息存入buffer时,用了字符数,英文和标点占用一个字节一个字符,utf8下的中文占用3个字节一个字符。

比如获得 hello world ,存入长度11,获得11字节的数据 hello world 。

获得  你好 world ,存入长度8,获得8字节的数据(实际上有12个字节) 你好 w 。

这样会导致buffer区域的内容丢失,导致如上代码得到的message信息缺失。

 

以下内容摘自node.js官网

 1 Event: 'message'#
 2 Added in: v0.1.99
 3 The 'message' event is emitted when a new datagram is available on a socket. The event handler function is passed two arguments: msg and rinfo.
 4 
 5 msg <Buffer> The message.
 6 rinfo <Object> Remote address information.
 7 
 8 address <string> The sender address.
 9 family <string> The address family ('IPv4' or 'IPv6').
10 port <number> The sender port.
11 size <number> The message size.

 

 

posted on 2018-11-01 16:49  mickey135  阅读(459)  评论(0)    收藏  举报