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优化针对IE6.0起作用(详细整理)
Dec 25 Javascript
jQuery 选择器项目实例分析及实现代码
Dec 28 Javascript
JS 如何获取radio选中后的值及不选择取radio的值
Oct 28 Javascript
JS动态添加与删除select中的Option对象(示例代码)
Dec 20 Javascript
Javascript获取CSS伪元素属性的实现代码
Sep 28 Javascript
jQuery ajax请求返回list数据动态生成input标签,并把list数据赋值到input标签
Mar 29 Javascript
浅谈js中的三种继承方式及其优缺点
Aug 10 Javascript
简单理解vue中Props属性
Oct 27 Javascript
Web开发中客户端的跳转与服务器端的跳转的区别
Mar 05 Javascript
基于vue2框架的机器人自动回复mini-project实例代码
Jun 13 Javascript
简单实现js轮播图效果
Jul 14 Javascript
简单了解JavaScript中常见的反模式
Jun 21 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
开发大型 PHP 项目的方法
2007/01/02 PHP
2014过年倒计时示例
2014/01/31 PHP
javascript prototype,executing,context,closure
2008/12/24 Javascript
用jquery统计子菜单的条数示例代码
2013/10/18 Javascript
JavaScript的作用域和块级作用域概念理解
2014/09/21 Javascript
ECMAScript 5严格模式(Strict Mode)介绍
2015/03/02 Javascript
JavaScript仿支付宝6位数字密码输入框
2016/12/29 Javascript
JavaScript定义全局对象的方法示例
2017/01/12 Javascript
JavaScript 网页中实现一个计算当年还剩多少时间的倒数计时程序
2017/01/25 Javascript
JavaScript如何获取一个元素的样式信息
2019/07/29 Javascript
javascript刷新父页面方法汇总详解
2019/10/10 Javascript
[01:26]神话结束了,却也刚刚开始——DOTA2新英雄玛尔斯驾临战场
2019/03/10 DOTA
[55:44]完美世界DOTA2联赛决赛 FTD vs Phoenix 第二场 11.08
2020/11/11 DOTA
Python正则表达式的使用范例详解
2014/08/08 Python
Python中的Numeric包和Numarray包使用教程
2015/04/13 Python
Python中django学习心得
2017/12/06 Python
python图像处理入门(一)
2019/04/04 Python
python实现翻译word表格小程序
2020/02/27 Python
Python实现打包成库供别的模块调用
2020/07/13 Python
Python切片列表字符串如何实现切换
2020/08/06 Python
Matplotlib中rcParams使用方法
2021/01/05 Python
PyCharm 解决找不到新打开项目的窗口问题
2021/01/15 Python
CSS3 毛玻璃效果
2019/08/14 HTML / CSS
HTML5 UTF-8 中文乱码的解决方法
2013/11/18 HTML / CSS
基于HTML5+CSS3实现简单的时钟效果
2017/09/11 HTML / CSS
canvas实现烟花的示例代码
2020/01/16 HTML / CSS
英国奢华护肤、美容和Spa品牌:Temple Spa
2019/11/02 全球购物
台湾屈臣氏网路商店:Watsons台湾
2020/12/29 全球购物
《七颗钻石》教学反思
2014/02/28 职场文书
成人继续教育实施方案
2014/03/01 职场文书
店面销售职位的职责
2014/03/09 职场文书
网吧最新创业计划书范文
2014/03/27 职场文书
营业员岗位职责范本
2015/04/14 职场文书
2019个人工作自我评价范文(3篇)
2019/09/19 职场文书
使用vue-element-admin框架从后端动态获取菜单功能的实现
2021/04/29 Vue.js
什么是css原子化,有什么用?
2022/04/24 HTML / CSS