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

项目编码为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官网

 Event: 'message'#
Added in: v0.1.99
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. msg <Buffer> The message.
rinfo <Object> Remote address information. address <string> The sender address.
family <string> The address family ('IPv4' or 'IPv6').
port <number> The sender port.
size <number> The message size.

node.js 监听message事件 message字符串丢失信息的更多相关文章

  1. 使用Node.JS监听文件夹变化

    使用Node.JS监听文件夹改变有许多应用场合,比如: 构建自动编绎工具 当源文件改变时,自动运行build过程,比如当你写CoffeeScript文件或SASS CSS文件时,保存之后可即时生成对应 ...

  2. 原 JS监听回车事件

    原 JS监听回车事件 发表于2年前(2014-06-04 10:16)   阅读(6101) | 评论(0) 11人收藏此文章, 我要收藏 赞0 1月16日厦门 OSC 源创会火热报名中,奖品多多哦  ...

  3. 两种js监听滚轮事件的方式

    前段时间在写前端的时候,需要监听浏览器的滚轮事件 网上查了一下,找到两种监听滚轮事件的方法: 一.原生js通过window.onscroll监听 //window.onscroll = functio ...

  4. js 监听后退事件及跳转页面

    //直接跳转 window.location.href="b.html"; //返回上一级页面 window.history.back(-1); //返回下一级页面 window. ...

  5. node.js监听文件变化

    前言 随着前端技术的飞速发展,前端开发也从原始的刀耕火种,向着工程化效率化的方向发展.在各种开发框架之外,打包编译等技术也是层出不穷,开发体验也是越来越好.例如HMR,让我们的更新可以即时可见,告别了 ...

  6. js监听回车事件

    标题通俗的说,也就是绑定当用户按下回车键要执行的事件. 下面,入正题. 第一步,先编写简单的页面代码,这里我们只需要一个按钮就足够了.当然,还有按钮事件. <html> <head& ...

  7. 十一、Node.js监听代码改动自动重启node插件supervisor

    我们慢慢地发现,每次我们稍微改变js代码都需要重启服务才能在浏览器显示新的效果,很麻烦,这里我们可以通过npm命令安装supervisoror插件,安装方法如下 之前章节我们知道安装了nodejs就会 ...

  8. form表单回车提交问题,JS监听回车事件

    我们有时候希望回车键敲在文本框(input element)里来提交表单(form),但有时候又不希望如此.比如搜索行为,希望输入完关键词之后直接按回车键立即提交表单,而有些复杂表单,可能要避免回车键 ...

  9. js监听滚动条事件

    (function () { if(document.addEventListener){ document.addEventListener('mousewheel',scrollFunc,fals ...

随机推荐

  1. Xcode中模拟器慢

    取消下图中框框打勾

  2. 【RabbitMQ】3、工作队列模式(work模式)

    上一篇博客的作为rabbitMQ的入门程序,也是简单队列模式,一个生产者,一个消费者,今天这篇博客介绍work模式,一个生产者,多个消费者,下面的例子模拟两个消费者的情况. 图示:         一 ...

  3. 在Django中使用Q()对象

    转载于:  http://www.smallerpig.com/1000.html 问题 一般我们在Django程序中查询数据库操作都是在QuerySet里进行进行,例如下面代码: >>& ...

  4. 协议森林08 不放弃 (TCP协议与流通信)

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! TCP(Transportation Control Protocol)协议与IP ...

  5. OAuth2.0认证和授权机制讲解

    第一章.OAuth2.0 介绍 OAuth认证 OAuth认证是为了做到第三方应用在未获取到用户敏感信息(如:账号密码.用户PIN等)的情况下,能让用户授权予他来访问开放平台(主要访问平台中的资源服务 ...

  6. 跳转到AppStore下载app

    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://itunes.apple.com/cn/ap ...

  7. Dubbo实践(六)Spring加载Bean流程

    根据上一小节对于spring扩展schema的介绍,大概可以猜到dubbo中相关的内容是如何实现的. 再来回顾Dubbo实践(一)中定义的dubbo-provider.xml: <?xml ve ...

  8. oracle优化脚本

    oracle优化脚本 --查看PGA的最佳设计建议SQL语句select PGA_TARGET_FOR_ESTIMATE / 1024 / 1024 PGAMB,       PGA_TARGET_F ...

  9. UIWebView 获取网页标题

    - (void)webViewDidFinishLoad:(UIWebView *)webView { NSString *urlString = webView.request.URL.absolu ...

  10. G1 GC日志:Application time: 0.8766273 seconds

    启动日志一直循环: 1.159: Application time: 0.8766273 seconds 1.160: Total time for which application threads ...