当前位置:网站首页>Node基于TCP建立的服务器
Node基于TCP建立的服务器
2022-08-08 17:31:00 【读心悦】
创建TCP服务器
Node.js中提供了net模块,用来实现TCP服务器与TCP客户端之间的通信。
当我们使用JavaScript来开发服务端的时候,只需要调用net模块就可以了。比如现在要创建一个TCP服务器,代码如下:app.js
const net = require("net"); const server = net.createServer(() => { console.log("客户端与服务器端连接已经建立") }) server.listen("8000", 'localhost', function () { console.log("服务端开始监听") console.log("地址信息:",server.address()) })
这是简单的一个TCP通信,现在执行命令:node app.js
在浏览器输入localhost:8000。
这是终端的信息:
服务端开始监听 地址信息: { address: '127.0.0.1', family: 'IPv4', port: 8000 } 客户端与服务器端连接已经建立
我们的浏览器输入localhost:8000回车后,就是客户端与服务端建立的TCP通信。启动服务端,但是客户端没有连接,终端信息如下:
服务端开始监听 地址信息: { address: '127.0.0.1', family: 'IPv4', port: 8000 }
createServer方法返回被创建的TCP服务器,它的回调函数有一个参数,是TCP服务器监听的socket端口对象。这是在createServer的回调函数中监听connection事件。
然而,我们可以单独对connection事件进行监听:
const net = require("net") const server = net.createServer(); server.listen(8000, 'localhost', function () { console.log('地址信息:', server.address()) }); server.on("connection", function (socket) { console.log('客户端开始已经连接'); socket.setEncoding('utf8'); // 设置内容格式 socket.on("data", function (res) { console.log("data==", socket.bytesRead) }); socket.on('end', function () { console.log("客户端关闭连接") }) })
现在我们建立好了TCP服务器。
可以使用socket对象的pipe方法将客户端发送的数据流写入到其他文件中去:
客户端的完整代码:
const net = require("net") const server = net.createServer(); const file = require('fs').createWriteStream('./text.txt'); server.listen(8000, 'localhost', function () { console.log('地址信息:', server.address()) }); server.on("connection", function (socket) { console.log('客户端开始已经连接'); socket.setEncoding('utf-8'); // 设置内容格式 socket.on("data", function (res) { console.log("data==", socket.bytesRead) }); socket.pause(); socket.resume(); socket.pipe(file, { end: false }); // 客户端关闭连接时候,添加的结束标志 socket.on("end", function () { file.end("结束了"); socket.unpipe(file); // 取消对文件的写入 }) socket.on('end', function () { console.log("客户端关闭连接") }) })
创建TCP客户端
const net = require("net"); const client = new net.Socket(); client.setEncoding("utf8"); client.connect(8000, 'localhost', function () { console.log('已经连接服务器了'); client.write('你好') }); client.on('data', function (data) { console.log("服务器发送的数据", data) })
客户端连接服务端后,服务端的日志文件text.txt,写入了“你好”
边栏推荐
猜你喜欢
【CC3200AI 实验教程4】疯壳·AI语音人脸识别(会议记录仪/人脸打卡机)-GPIO
yarn : 无法加载文件 D:xxx\node_global\yarn.ps1 因为在此系统上禁止运行脚本
Cholesterol-PEG-DBCO,CLS-PEG-DBCO,胆固醇-聚乙二醇-二苯基环辛炔一种环炔烃
WPF StepBar
leetcode:313. 超级丑数
【历史上的今天】8 月 8 日:中国第一个校园 BBS 成立;网景通信上市;EarthLink 创始人出生
【教程2】疯壳·ARM功能手机-测试程序介绍
一甲子,正青春,CCF创建六十周年庆典在苏州举行
Detailed explanation of JVM memory model and structure (five model diagrams)
开源一夏 | RuntimeException 子类
随机推荐
基于simulink的风力机房温度控制系统仿真
How big is 1dp!
数据库分析与优化
史上最强IDEA工具使用教程,你想要的全都有!
c语言指针运算
DSPE-PEG-NH2,DSPE-PEG-amine,474922-26-4,磷脂-聚乙二醇-氨基科研试剂
正则在js中的使用
Cy5反式环辛烯,TCO-Cy5,Cy5 trans-cyclooctene标记生物分子
dp,dpi,px知识补充
L2-019 悄悄关注 (25 分)
yarn : 无法加载文件 D:xxx\node_global\yarn.ps1 因为在此系统上禁止运行脚本
开源一夏 | 疫情期间闲来无事,我自制了一个按钮展示框特效来展示我的博客
mysql中模糊查询的四种用法介绍
使用电脑通过VNC Viewer远程连接树莓派4B
Debug和Release的区别
poj1363 Rails(栈模拟)
win10如何设置定时联网断网辅助自律
L2-027 名人堂与代金券 (25 分)
C1. Pokémon Army (easy version)
LeetCode_二叉树_中等_515.在每个树行中找最大值