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 相关文章推荐
setAttribute 与 class冲突解决
Feb 17 Javascript
JQUERY复选框CHECKBOX全选,取消全选
Aug 30 Javascript
基于jquery的横向滚动条(滑动条)
Feb 24 Javascript
Node.js生成HttpStatusCode辅助类发布到npm
Apr 09 Javascript
原生JS:Date对象全面解析
Sep 06 Javascript
简单谈谈JS数组中的indexOf方法
Oct 13 Javascript
jquery无法为动态生成的元素添加点击事件的解决方法(推荐)
Dec 26 Javascript
js手机号4位显示空格,银行卡每4位显示空格效果
Mar 23 Javascript
vue.js过滤器+ajax实现事件监听及后台php数据交互实例
May 22 Javascript
layui layer select 选择被遮挡的解决方法
Sep 21 Javascript
利用Vue的v-for和v-bind实现列表颜色切换
Jul 17 Javascript
springboot+vue实现文件上传下载
Nov 17 Vue.js
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
四月新番又没了,《Re:从零开始的异世界生活》第二季延期至7月播出
2020/05/06 日漫
关于Sphinx创建全文检索的索引介绍
2013/06/25 PHP
php实现RSA加密类实例
2015/03/26 PHP
php实现的读取CSV文件函数示例
2017/02/07 PHP
javascript 面向对象编程基础:封装
2009/08/21 Javascript
js监听输入框值的即时变化onpropertychange、oninput
2011/07/13 Javascript
img onload事件绑定各浏览器均可执行
2012/12/19 Javascript
利用jQuery简单实现产品展示图片左右滚动功能(示例代码)
2014/01/02 Javascript
javascript原生和jquery库实现iframe自适应高度和宽度
2014/07/18 Javascript
基于jQuery实现的文字按钮表单特效整理
2014/12/07 Javascript
javascript递归回溯法解八皇后问题
2015/04/22 Javascript
javascript比较两个日期相差天数的方法
2015/07/24 Javascript
Bootstrap3 模态框使用实例
2017/02/22 Javascript
jquery在vue脚手架中的使用方式示例
2017/08/29 jQuery
Angular实现下载安装包的功能代码分享
2017/09/05 Javascript
vue2 router 动态传参,多个参数的实例
2017/11/10 Javascript
vue.js指令v-for使用以及下标索引的获取
2019/01/31 Javascript
小程序:授权、登录、session_key、unionId的详解
2019/05/15 Javascript
js实现鼠标拖拽div左右滑动
2020/01/15 Javascript
[01:58]DOTA2上海特级锦标赛现场采访:RTZ这个ID到底好不好
2016/03/25 DOTA
简单了解Python下用于监视文件系统的pyinotify包
2015/11/13 Python
Python 列表理解及使用方法
2017/10/27 Python
关于django 数据库迁移(migrate)应该知道的一些事
2018/05/27 Python
Python 使用类写装饰器的小技巧
2018/09/30 Python
python导入pandas具体步骤方法
2019/06/23 Python
python-sys.stdout作为默认函数参数的实现
2020/02/21 Python
Python xpath表达式如何实现数据处理
2020/06/13 Python
全球知名旅游社区巴西站点:TripAdvisor巴西
2016/07/21 全球购物
super关键字的用法
2012/04/10 面试题
车间操作工岗位职责
2013/12/19 职场文书
《逃家小兔》教学反思
2014/02/23 职场文书
反四风对照检查材料思想汇报
2014/09/16 职场文书
2015年酒店服务员工作总结
2015/05/18 职场文书
2016党员学习心得体会范文
2016/01/23 职场文书
导游词之安徽醉翁亭
2020/01/10 职场文书
js Proxy的原理详解
2021/05/25 Javascript