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.
浙公网安备 33010602011771号