Node.js net模块功能及事件监听用法分析


Posted in Javascript onJanuary 05, 2019

本文实例讲述了Node.js net模块功能及事件监听用法。分享给大家供大家参考,具体如下:

net模块

对比C语言的网络编程,Node.js有更加简便的开发模式与模块提供。它就是net模块
在需要使用的时候只需要require("net")就可以引入模块了。

var net = require("net");

服务端编程

引入模块的前提下:

1. 创建一个新的TCP或IPC服务

var server = net.createServer(function(client_socket) {
  console.log("client coming");
});

2. 创建connections 启动一个 server 监听.

server.listen({
  host:'127.0.0.1',
  port:6080,
  exclusive:true,
});

客户端编程

引入net模块。

1. 创建一个连接即可

//端口要与需要连接的服务器端口一致
var socket = net.connect({
  port:6080,
  host:'127.0.0.1',
},
function(){
  console.log("connected to server!");
});

效果

Node.js net模块功能及事件监听用法分析

事件监听

常用监听事件事件类型 事件触发条件
connection 连接成功调用的事件
error 发生错误调用的事件
close 当server关闭的时候触发. 注意,如果有连接存在, 直到所有的连接结束才会触发这个事件
data 当接收到数据的时触发该事件。data 参数是一个 Buffer 或 String。数据编码由 socket.setEncoding() 设置。注意当 Socket 发送 data 事件的时候,如果没有监听者数据将会丢失。
listening 当服务被绑定后调用 server.listen().
end 当 socket 的另一端发送一个 FIN 包的时候触发,从而结束 socket 的可读端。

监听事件的API都是使用on()方法。

Demo演示

下面有一个详细的demo可自行尝试

tcpserver.js

//tcpserver.js
var net = require('net');
var server = net.createServer(function(client_socket) {
  console.log("client coming");
  client_socket.setEncoding("utf8");
  //接收到客户端发送的错误就会调用
  client_socket.on("error",function(err){
    console.log("error");
  });
  //有接收到客户端的数据调用的函数
  //data 默认是Hex(二进制编码)格式,如果强制设置为utf8那么底层会先转换为utf8字符串传过去
  client_socket.on("data",function(data){
    console.log(data);
  });
  //用户断线离开
  client_socket.on("close",function(client_socket){
  console.log("close socket");
  });
});
//编写代码指示server监听到某个端口上
//配置好之后就会监听server 等待客户端接入
//host==> 地址 port ==>端口 exclusive ==> 独占模式
server.listen({
  host:'127.0.0.1',
  port:6080,
  exclusive:true,
});
server.on("connection",function(client_socket){
  console.log("connection");
});
//server.unref();//停止node对server的监听事件
server.on("error",function (error) {
  console.log("error is on server",error);
});
//服务器关闭事件
server.on("close",function(client_socket){
  console.log("close server");
});

tcpclient.js

//tcpclient.js
var net = require("net");
//net.socket类
var socket = net.connect({
  port:6080,
  host:'127.0.0.1',
},
function(){
  console.log("connected to server!");
});
//连接成功调用的事件
socket.on("connect",function(){
  console.log("connect success");
  //已utf-8的方式编码成二进制的数据传输
  socket.write("Hello World!","utf8");
});
//发生错误调用的事件
socket.on("error",function (err) {
  console.log("error is ",err);
});
//socket 关闭事件
socket.on("close",function(){
  console.log("close");
});
//对方发送关闭数据包的事件
socket.on("end",function(){
  console.log("end event");
})
//当有数据发送过来的时候调用
socket.on("data",function(data){
  console.log(data);
});

希望本文所述对大家nodejs程序设计有所帮助。

Javascript 相关文章推荐
js获取checkbox复选框选中的选项实例
Aug 24 Javascript
Javascript控制input输入时间格式的方法
Jan 28 Javascript
JS实现不使用图片仿Windows右键菜单效果代码
Oct 22 Javascript
在AngularJS中使用jQuery的zTree插件的方法
Apr 21 Javascript
Google Maps基础及实例解析
Aug 06 Javascript
面试常见的js算法题
Mar 23 Javascript
jQuery实现IE输入框完成placeholder标签功能的方法
Sep 20 jQuery
vue实现固定位置显示功能
May 30 Javascript
原生js实现的移动端可拖动进度条插件功能详解
Aug 15 Javascript
vue+layui实现select动态加载后台数据的例子
Sep 20 Javascript
vue 组件之间事件触发($emit)与event Bus($on)的用法说明
Jul 28 Javascript
解决ant design vue中树形控件defaultExpandAll设置无效的问题
Oct 26 Javascript
JS无限级导航菜单实现方法
Jan 05 #Javascript
JSON字符串操作移除空串更改key/value的介绍
Jan 05 #Javascript
JavaScript常见事件对象与操作实例总结
Jan 05 #Javascript
JavaScript常见事件处理程序实例总结
Jan 05 #Javascript
JavaScript代码调试方法实例小结
Jan 05 #Javascript
JavaScript实现连连看连线算法
Jan 05 #Javascript
JavaScript错误处理操作实例详解
Jan 04 #Javascript
You might like
全国FM电台频率大全 - 13 福建省
2020/03/11 无线电
web方式ftp
2006/10/09 PHP
深入php self与$this的详解
2013/06/08 PHP
解决ajax+php中文乱码的方法详解
2013/06/09 PHP
php相对当前文件include其它文件的方法
2015/03/13 PHP
thinkphp微信开发(消息加密解密)
2015/12/02 PHP
PHP 常用时间函数资料整理
2016/10/22 PHP
PHP策略模式定义与用法示例
2017/07/27 PHP
utf8的编码算法 转载
2006/12/27 Javascript
js兼容的placeholder属性详解
2013/08/18 Javascript
jquery实现页面关键词高亮显示的方法
2015/03/12 Javascript
JavaScript简单实现弹出拖拽窗口(二)
2016/06/17 Javascript
Javascript DOM事件操作小结(监听鼠标点击、释放,悬停、离开等)
2017/01/20 Javascript
jquery+ajax实现省市区三级联动 (封装和不封装两种方式)
2017/05/15 jQuery
nodejs接入阿里大鱼短信验证码的方法
2017/07/10 NodeJs
Vue中自定义全局组件的实现方法
2017/12/08 Javascript
解决vue+webpack打包路径的问题
2018/03/06 Javascript
clipboard.js在移动端复制失败的解决方法
2018/06/13 Javascript
谈谈React中的Render Props模式
2018/12/06 Javascript
Flutter部件内部状态管理小结之实现Vue的v-model功能
2019/06/11 Javascript
vue-cli设置publicPath小记
2020/04/14 Javascript
JavaScript enum枚举类型定义及使用方法
2020/05/15 Javascript
在vue中配置不同的代理同时访问不同的后台操作
2020/09/11 Javascript
vue+echarts实现中国地图流动效果(步骤详解)
2021/01/27 Vue.js
[02:42]DOTA2城市挑战赛收官在即 四强之争风起云涌
2018/06/05 DOTA
[05:00]TI9战队采访 - Royal Never Give Up
2019/08/20 DOTA
解决pycharm安装第三方库失败的问题
2020/05/09 Python
使用 prometheus python 库编写自定义指标的方法(完整代码)
2020/06/29 Python
CSS3改变浏览器滚动条样式
2019/01/04 HTML / CSS
国贸专业个人求职信范文
2014/01/08 职场文书
毕业生见习报告总结
2014/11/08 职场文书
2014年幼儿园园务工作总结
2014/12/05 职场文书
置业顾问岗位职责
2015/02/09 职场文书
2016年幼儿园庆六一开幕词
2016/03/04 职场文书
《辉夜大小姐想让我告白》第三季正式预告
2022/03/20 日漫
python中数组和列表的简单实例
2022/03/25 Python