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中令你抓狂的魔术变量
Nov 30 Javascript
jQuery 瀑布流 绝对定位布局(二)(延迟AJAX加载图片)
May 23 Javascript
jquery.bgiframe.js在IE9下提示INVALID_CHARACTER_ERR错误
Jan 11 Javascript
如何调试异步加载页面里包含的js文件
Oct 30 Javascript
PHP实现的各种中文编码转换类分享
Jan 23 Javascript
自定义jQuery插件方式实现强制对象重绘的方法
Mar 23 Javascript
JavaScript中操作字符串小结
May 04 Javascript
jquery实现鼠标经过显示下划线的渐变下拉菜单效果代码
Aug 24 Javascript
通用javascript代码判断版本号是否在版本范围之间
Nov 29 Javascript
需要牢记的JavaScript基础知识
Sep 25 Javascript
全面解析vue router 基本使用(动态路由,嵌套路由)
Sep 02 Javascript
详解搭建es6+devServer简单开发环境
Sep 25 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获取某个目录大小的代码
2008/09/10 PHP
fleaphp crud操作之findByField函数的使用方法
2011/04/23 PHP
对联广告js flash激活
2006/10/19 Javascript
Pro JavaScript Techniques学习笔记
2010/12/28 Javascript
Express.JS使用详解
2014/07/17 Javascript
jquery使用animate方法实现控制元素移动
2015/03/27 Javascript
JavaScript制作简易的微信打飞机
2015/03/31 Javascript
JS实现的左侧竖向滑动菜单效果代码
2015/10/19 Javascript
javascript HTML5文件上传FileReader API
2020/03/27 Javascript
关于Javascript中defer和async的区别总结
2016/09/20 Javascript
浅谈Angular中ngModel的$render
2016/10/24 Javascript
详解如何在 vue 项目里正确地引用 jquery 和 jquery-ui的插件
2017/06/01 jQuery
JavaScript实现选中文字提示新浪微博分享效果
2017/06/15 Javascript
vue.js给动态绑定的radio列表做批量编辑的方法
2018/02/28 Javascript
vue.js内置组件之keep-alive组件使用
2018/07/10 Javascript
Vue模板语法中数据绑定的实例代码
2019/05/17 Javascript
JS前端模块化原理与实现方法详解
2020/03/17 Javascript
VUE Elemen-ui之穿梭框使用方法详解
2021/01/19 Javascript
[01:28:31]《加油DOTA》真人秀 第五期
2014/09/01 DOTA
在RedHat系Linux上部署Python的Celery框架的教程
2015/04/07 Python
在Linux系统上通过uWSGI配置Nginx+Python环境的教程
2015/12/25 Python
pandas pivot_table() 按日期分多列数据的方法
2018/11/16 Python
使用Python和Prometheus跟踪天气的使用方法
2019/05/06 Python
PYTHON如何读取和写入EXCEL里面的数据
2019/10/28 Python
最小二乘法及其python实现详解
2020/02/24 Python
Python通用唯一标识符uuid模块使用案例
2020/09/10 Python
详解Python GUI编程之PyQt5入门到实战
2020/12/10 Python
利用Python实现自动扫雷小脚本
2020/12/17 Python
省优秀教师事迹材料
2014/01/30 职场文书
临床护士自荐信
2014/01/31 职场文书
任命书格式模板
2015/09/22 职场文书
2016银行求职自荐信
2016/01/28 职场文书
2019广播稿怎么写
2019/04/17 职场文书
导游词之太原天龙山
2020/01/02 职场文书
JavaScript实现简单的音乐播放器
2022/08/14 Javascript
源码安装apache脚本部署过程详解
2022/09/23 Servers