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 相关文章推荐
jquery tools之tabs 选项卡/页签
Jul 25 Javascript
javascript instanceof 内部机制探析
Oct 15 Javascript
javascript实现确定和取消提示框效果
Jul 10 Javascript
js select实现省市区联动选择
Apr 17 Javascript
原生js实现tab选项卡切换
Mar 23 Javascript
原生js开发的日历插件
Feb 04 Javascript
jQuery复合事件用法示例
Jun 10 jQuery
详解在WebStorm中添加Vue.js单文件组件的高亮及语法支持
Oct 21 Javascript
基于Bootstrap下拉框插件bootstrap-select使用方法详解
Aug 07 Javascript
vue+axios+element ui 实现全局loading加载示例
Sep 11 Javascript
JavaScript中遍历的十种方法总结
Dec 15 Javascript
了不起的11个JavaScript代码重构最佳实践小结
Jan 11 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
了解咖啡雨林联盟认证 什么是雨林认证 雨林认证是什么意思
2021/03/05 新手入门
PHP 工厂模式使用方法
2010/05/18 PHP
第4章 数据处理-php正则表达式-郑阿奇(续)
2011/07/04 PHP
JavaScript实现删除电脑的关机键
2016/07/26 PHP
php + ajax 实现的写入数据库操作简单示例
2020/05/16 PHP
javascript算法题 求任意一个1-9位不重复的N位数在该组合中的大小排列序号
2012/07/21 Javascript
jquery实现在光标位置插入内容的方法
2015/02/05 Javascript
jquery获取文档高度和窗口高度汇总
2016/01/25 Javascript
JavaScript中关联原型链属性特性
2016/02/13 Javascript
JavaScript数据结构之二叉树的删除算法示例
2017/04/13 Javascript
详解vue-cli本地环境API代理设置和解决跨域
2017/09/05 Javascript
HTML+JS实现“代码雨”效果源码(黑客帝国文字下落效果)
2020/03/17 Javascript
vue prop传值类型检验方式
2020/07/30 Javascript
解决antd日期选择组件,添加value就无法点击下一年和下一月问题
2020/10/29 Javascript
[41:05]Serenity vs Pain 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
python调用cmd命令行制作刷博器
2014/01/13 Python
python脚本实现统计日志文件中的ip访问次数代码分享
2014/08/06 Python
python中List的sort方法指南
2014/09/01 Python
python BeautifulSoup设置页面编码的方法
2015/04/03 Python
将Python代码打包为jar软件的简单方法
2015/08/04 Python
python自动化报告的输出用例详解
2018/05/30 Python
使用Python给头像戴上圣诞帽的图像操作过程解析
2019/09/20 Python
python读取ini配置的类封装代码实例
2020/01/08 Python
10个python爬虫入门基础代码实例 + 1个简单的python爬虫完整实例
2020/12/16 Python
HTML5视频支持检测(检查浏览器是否支持视频播放)
2013/06/08 HTML / CSS
网上书店创业计划书
2014/01/12 职场文书
信息专业大学生自我评价分享
2014/01/17 职场文书
学雷锋日活动总结
2015/02/06 职场文书
服装店员工管理制度
2015/08/07 职场文书
tensorflow+k-means聚类简单实现猫狗图像分类的方法
2021/04/28 Python
redis 存储对象的方法对比分析
2021/08/02 Redis
Python 实现Mac 屏幕截图详解
2021/10/05 Python
MybatisPlus EntityWrapper如何自定义SQL
2022/03/22 Java/Android
docker-compose部署Yapi的方法
2022/04/08 Servers
Python实现Matplotlib,Seaborn动态数据图
2022/05/06 Python
使用opencv-python如何打开USB或者笔记本前置摄像头
2022/06/21 Python