node.js使用net模块创建服务器和客户端示例【基于TCP协议】


Posted in Javascript onFebruary 14, 2020

本文实例讲述了node.js使用net模块创建服务器和客户端。分享给大家供大家参考,具体如下:

node.js中net模块创建服务器和客户端

1.node.js中net模块创建服务器(net.createServer)

// 将net模块 引入进来
var net = require("net");
// 创建一个net.Server用来监听,当连接进来的时候,就会调用我们的函数
// client_sock,就是我们的与客户端通讯建立连接配对的socket
// client_sock 就是与客户端通讯的net.Socket
var server = net.createServer(function(client_sock) {
 console.log("client comming", client_sock.remoteAddress, client_sock.remotePort);
 // 设置你接受的格式,
 // client_sock.setEncoding("utf8");
 // client_sock.setEncoding("hex"); // 转成二进制的文本编码
 //
 // 客户端断开连接的时候处理,用户断线离开了
 client_sock.on("close", function() {
 console.log("close socket");
 });
 // 接收到客户端的数据,调用这个函数
 // data 默认是Buffer对象,如果你强制设置为utf8,那么底层会先转换成utf8的字符串,传给你
 // hex 底层会把这个Buffer对象转成二进制字符串传给你
 // 如果你没有设置任何编码 <Buffer 48 65 6c 6c 6f 57 6f 72 6c 64 21>
 // utf8 --> HelloWorld!!!  hex--> "48656c6c6f576f726c6421"
 client_sock.on("data", function(data) {
 console.log(data);
 client_sock.write("goodbye!!!");
 client_sock.end(); // 正常关闭
 });
 client_sock.on("error", function(err) {
 console.log("error", err);
 });
});
// 当我开始监听的时候就会调用这个回掉函数
server.on("listening", function() {
 console.log("start listening...");
});
// 监听发生错误的时候调用
server.on("error", function() {
 console.log("listen error");
});
server.on("close", function() {
 console.log("server stop listener");
});
/*
server.on("connection", function(client_sock) {
 console.log("client comming 22222");
});
*/
// 编写代码,指示这个server监听到哪个端口上面。
// 127.0.0.1: 6080
// node就会来监听我们的server,等待连接接入
server.listen({
 port: 6080,
 host: "127.0.0.1",
 exclusive: true,
});
// 停止node对server的监听事件处理,那么node就没有其他的事件要处理,所以就退出了。
// server.unref(); // 取消node,对server的事件的监听;
// server.close(); // 主动的掉这个server.close才会触发这个net.Server的close事件

2.node.js中net模块创建客户端(net.connect())

var net = require("net");
// net.Socket,
var sock = net.connect({
 port: 6080,
 host: "127.0.0.1",
}, function() {
 console.log('connected to server!');
});
// 连接成功调用的事件
sock.on("connect",function() {
 console.log("connect success");
 // 在这里我们就可以发送数据了
 sock.write("HelloWorld!", "utf8");
 // end
});
// end
// 有错误发生调用的事件
sock.on("error", function(e) {
 console.log("error", e);
});
// socket关闭的事件
sock.on("close", function() {
 console.log("close");
});
// 对方发送了关闭数据包过来的事件
sock.on("end", function() {
 console.log("end event");
});
// 当有数据发生的时候,调用;
sock.on("data", function(data) {
 console.log(data);
});

希望本文所述对大家node.js程序设计有所帮助。

Javascript 相关文章推荐
用jQuery简化JavaScript开发分析
Feb 19 Javascript
手把手教你自己写一个js表单验证框架的方法
Sep 14 Javascript
JavaScript对象之深度克隆介绍
Dec 08 Javascript
jQuery实现简单的列表式导航菜单效果代码
Aug 31 Javascript
深入浅析Node.js 事件循环
Dec 20 Javascript
jquery自定义右键菜单、全选、不连续选择
Mar 01 Javascript
使用javascript插入样式
Mar 14 Javascript
BootStrap学习系列之Bootstrap Typeahead 组件实现百度下拉效果(续)
Jul 07 Javascript
JS取模、取商及取整运算方法示例
Oct 13 Javascript
AngularJS学习第二篇 AngularJS依赖注入
Feb 13 Javascript
ndm:NPM的桌面GUI应用程序
Oct 15 Javascript
如何在JavaScript中使用localStorage详情
Feb 04 Javascript
node事件循环和process模块实例分析
Feb 14 #Javascript
vue+springboot图片上传和显示的示例代码
Feb 14 #Javascript
JavaScript简单编程实例学习
Feb 14 #Javascript
JS实现打砖块游戏
Feb 14 #Javascript
从零使用TypeScript开发项目打包发布到npm
Feb 14 #Javascript
JavaScript中的this原理及6种常见使用场景详解
Feb 14 #Javascript
node.js中对Event Loop事件循环的理解与应用实例分析
Feb 14 #Javascript
You might like
wiki-shan写的php在线加密的解密程序
2008/09/07 PHP
php线性表顺序存储实现代码(增删查改)
2012/02/16 PHP
PHP CURL获取cookies模拟登录的方法
2013/11/04 PHP
php获取网卡的MAC地址支持WIN/LINUX系统
2014/04/30 PHP
js 操作select相关方法函数
2009/12/06 Javascript
javascript计算当月剩余天数(天数计算器)示例代码
2014/01/09 Javascript
jQuery实现鼠标滚轮动态改变样式或效果
2015/01/05 Javascript
函数window.open实现关闭所有的子窗口
2015/08/03 Javascript
js实现动态加载脚本的方法实例汇总
2015/11/02 Javascript
JavaScript获取短信验证码(周期性)
2016/12/29 Javascript
详解webpack 配合babel 将es6转成es5 超简单实例
2017/05/02 Javascript
Vue如何实现组件的源码解析
2017/06/08 Javascript
LayUi中接口传数据成功,表格不显示数据的解决方法
2018/08/19 Javascript
Vue.js更改调试地址端口号的实例
2018/09/19 Javascript
JavaScript碰撞检测原理及其实现代码
2020/03/12 Javascript
javascript实现画板功能
2020/04/12 Javascript
Django框架下在URLconf中指定视图缓存的方法
2015/07/23 Python
python爬虫入门教程--快速理解HTTP协议(一)
2017/05/25 Python
Python数据类型中的“冒号“[::]——分片与步长操作示例
2018/01/24 Python
Python 类属性与实例属性,类对象与实例对象用法分析
2019/09/20 Python
python+Selenium自动化测试——输入,点击操作
2020/03/06 Python
美国蔬菜和植物种子公司:Burpee
2017/02/01 全球购物
澳大利亚便宜隐形眼镜购买网站:QUICKLENS Australia
2018/10/06 全球购物
说出ArrayList,Vector, LinkedList的存储性能和特性
2015/01/04 面试题
Windows和Linux动态库应用异同
2016/04/17 面试题
Java基础面试题
2014/07/19 面试题
简历中自我评价范文3则
2013/12/14 职场文书
财务部出纳岗位职责
2013/12/22 职场文书
国际贸易专业个人鉴定
2014/02/22 职场文书
海洋科学专业求职信
2014/08/10 职场文书
基层党员对照检查材料
2014/08/25 职场文书
运动员代表致辞
2015/07/29 职场文书
opencv读取视频并保存图像的方法
2021/06/04 Python
Oracle中DBLink的详细介绍
2022/04/29 Oracle
Go微服务项目配置文件的定义和读取示例详解
2022/06/21 Golang
CSS实现背景图片全屏铺满自适应的3种方式
2022/07/07 HTML / CSS