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 相关文章推荐
ajaxControlToolkit AutoCompleteExtender的用法
Oct 30 Javascript
javascript 读取xml,写入xml 实现代码
Jul 10 Javascript
jQuery+jRange实现滑动选取数值范围特效
Mar 14 Javascript
基于javascript实现最简单的选项卡切换效果
May 16 Javascript
jQuery实现的超链接提示效果示例【附demo源码下载】
Sep 09 Javascript
AngularJS实现根据变量改变动态加载模板的方法
Nov 04 Javascript
Angular2学习教程之TemplateRef和ViewContainerRef详解
May 25 Javascript
Vue.directive()的用法和实例详解
Mar 04 Javascript
35个最好用的Vue开源库(史上最全)
Jan 03 Javascript
angular多语言配置详解
May 16 Javascript
js实现图片推拉门效果代码实例
May 18 Javascript
基于JavaScript或jQuery实现网站夜间/高亮模式
May 30 jQuery
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+curl 发送图片处理代码分享
2015/07/09 PHP
PHP性能分析工具xhprof的安装使用与注意事项
2017/12/19 PHP
DLL+ ActiveX控件+WEB页面调用例子
2010/08/07 Javascript
页面实时更新时间的JS实例代码
2013/12/18 Javascript
Javascript中常见的校验如域名、手机、邮箱等等
2014/01/02 Javascript
一个简单的实现下拉框多选的插件可移植性比较好
2014/05/05 Javascript
javascript数组输出的两种方式
2015/01/13 Javascript
js获取上传文件的绝对路径实现方法
2016/08/02 Javascript
AngularJS 中使用Swiper制作滚动图不能滑动的解决方法
2016/11/15 Javascript
Bootstrap基本样式学习笔记之表单(3)
2016/12/07 Javascript
jQuery Ajax使用FormData上传文件和其他数据后端web.py获取
2017/06/11 jQuery
Vue中$refs的用法详解
2018/06/24 Javascript
mpvue小程序循环动画开启暂停的实现方法
2019/05/15 Javascript
Vue多环境代理配置方法思路详解
2019/06/21 Javascript
JS Generator 函数的含义与用法实例总结
2020/04/08 Javascript
Python装饰器的函数式编程详解
2015/02/27 Python
Python中不同进制互相转换(二进制、八进制、十进制和十六进制)
2015/04/05 Python
讲解Python中运算符使用时的优先级
2015/05/14 Python
Python制作Windows系统服务
2017/03/25 Python
python matplotlib实现双Y轴的实例
2019/02/12 Python
Python爬虫headers处理及网络超时问题解决方案
2020/06/19 Python
Python ellipsis 的用法详解
2020/11/20 Python
python3.7中安装paddleocr及paddlepaddle包的多种方法
2020/11/27 Python
几款主流好用的富文本编辑器(所见即所得常用编辑器)介绍
2021/03/17 Javascript
CSS3 3D酷炫立方体变换动画的实现
2019/03/26 HTML / CSS
html5 迷宫游戏(碰撞检测)实例一
2013/07/25 HTML / CSS
HTML+CSS+JavaScript实现图片3D展览的示例代码
2020/10/12 HTML / CSS
Javascript如何发送一个Ajax请求
2015/01/26 面试题
what is the difference between ext2 and ext3
2015/08/25 面试题
个人廉洁自律承诺书
2014/03/27 职场文书
大学活动总结范文
2014/04/29 职场文书
原料仓仓管员岗位职责
2014/07/08 职场文书
党员作风建设整改方案
2014/10/27 职场文书
出纳年终工作总结2014
2014/12/05 职场文书
目标责任书格式范文
2015/05/11 职场文书
ORACLE数据库应用开发的三十个注意事项
2021/06/07 Oracle