经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » JS/JS库/框架 » Node.js » 查看文章
node.js 监听message事件 message字符串丢失信息
来源:cnblogs  作者:mickey135  时间:2018/11/2 9:11:29  对本文有异议
 
  1. 1 const dgram = require("dgram");
  2. 2 const server = dgram.createSocket("udp4");
  3. 3
  4. 4 server.on("message", (msg, rinfo) => {
  5. 5 log.info("recv %s(%d bytes) from client %s:%d", msg, msg.length, rinfo.address, rinfo.port);
  6. 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. 1 Event: 'message'#
  2. 2 Added in: v0.1.99
  3. 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. 4
  5. 5 msg <Buffer> The message.
  6. 6 rinfo <Object> Remote address information.
  7. 7
  8. 8 address <string> The sender address.
  9. 9 family <string> The address family ('IPv4' or 'IPv6').
  10. 10 port <number> The sender port.
  11. 11 size <number> The message size.

 

 

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号