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 相关文章推荐
javascript options属性集合操作代码
Dec 28 Javascript
js对象的比较
Feb 26 Javascript
jquery+css+ul模拟列表菜单具体实现思路
Apr 15 Javascript
文本框文本自动补全效果示例分享
Jan 19 Javascript
兼容最新firefox、chrome和IE的javascript图片预览实现代码
Aug 08 Javascript
Jquery左右滑动插件之实现超级炫酷动画效果附源码下载
Dec 02 Javascript
js自定义回调函数
Dec 13 Javascript
JSONP基础知识详解
Mar 19 Javascript
基于bootstrap按钮式下拉菜单组件的搜索建议插件
Mar 25 Javascript
jQuery鼠标悬停内容动画切换效果
Apr 27 jQuery
webstorm添加vue.js支持的方法教程
Jul 05 Javascript
javascript浅层克隆、深度克隆对比及实例解析
Feb 09 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
模拟OICQ的实现思路和核心程序(二)
2006/10/09 PHP
thinkphp的c方法使用示例
2014/02/24 PHP
php将HTML表格每行每列转为数组实现采集表格数据的方法
2015/04/03 PHP
php实现mysql数据库连接操作及用户管理
2015/11/08 PHP
yii去掉必填项中星号的方法
2015/12/28 PHP
PHP 中 DOMDocument保存xml时中文出现乱码问题的解决方案
2016/09/19 PHP
老生常谈PHP面向对象之注册表模式
2017/05/26 PHP
使用正则替换变量
2007/05/05 Javascript
js事件(Event)知识整理
2012/10/11 Javascript
浅析JQuery获取和设置Select选项的常用方法总结
2013/07/04 Javascript
JavaScript检查某个function是否是原生代码的方法
2014/08/20 Javascript
Jquery on绑定的事件 触发多次实例代码
2016/12/08 Javascript
探究react-native 源码的图片缓存问题
2017/08/24 Javascript
View.post() 不靠谱的地方你知道多少
2017/08/29 Javascript
JS基于递归实现网页版计算器的方法分析
2017/12/20 Javascript
react-router browserHistory刷新页面404问题解决方法
2017/12/29 Javascript
JS在if中的强制类型转换方式
2018/07/15 Javascript
基于vue实现一个禅道主页拖拽效果
2019/05/27 Javascript
有关vue 开发钉钉 H5 微应用 dd.ready() 不执行问题及快速解决方案
2020/05/09 Javascript
[08:29]DOTA2每周TOP10 精彩击杀集锦vol.7
2014/06/25 DOTA
python实现定时同步本机与北京时间的方法
2015/03/24 Python
Python 查看文件的编码格式方法
2017/12/21 Python
使用DataFrame删除行和列的实例讲解
2018/04/08 Python
Python3中FuzzyWuzzy库实例用法
2020/11/18 Python
Python实现疫情地图可视化
2021/02/05 Python
JustFab加拿大:女鞋、靴子、手袋和服装在线
2018/05/18 全球购物
幼儿园长自我鉴定
2013/10/17 职场文书
小学校长先进事迹材料
2014/05/13 职场文书
俞敏洪北大演讲稿
2014/05/22 职场文书
人事行政经理岗位职责
2014/06/18 职场文书
免职通知
2015/04/23 职场文书
交通安全宣传标语(100条)
2019/08/22 职场文书
二手手机买卖合同范本(2019年版)
2019/10/28 职场文书
python如何读取.mtx文件
2021/04/22 Python
apache基于端口创建虚拟主机的示例
2021/04/24 Servers
Python 的 sum() Pythonic 的求和方法详细
2021/10/16 Python