用Node.js在本地实现全双工通信

前置条件

  1. 需要安装node环境

创建项目

  1. 创建server文件
#创建server文件并进入
mkdir server && cd server

创建服务端

  1. 创建server.js
// 引入net模块
const net = require("net");

// 端口号和地址
const port = 3000;
const host = "127.0.0.1";

const server = net.createServer((socket) => {
	// 2. 等待连接,连接后触发 socket(Buffer)
	console.log("2. server is connected to" + socket);
});

// 1. 开启服务
server.listen(port, host, () => {
	console.log("1. server is running");
});

  1. vscode运行server.js
// ctrl+`打开终端
node server.js

  1. 输出的结果
PS E:\node\the_server> node .\server.js
1. server is running // server服务已经开启

创建客户端

  1. 创建client.js
// 引入net模块
const net = require("net");

const port = 3000;
const host = "127.0.0.1";

// 创建连接
const client = net.createConnection(port, host, port);
// 1. 连接server,成功后触发
client.on("connect", () => {
	console.log("1. client is connected");
});
  1. vscode运行client.js
// ctrl+shift+` 新建终端
node client.js
  1. 输出的结果
PS E:\node\the_server> node .\client.js
1. client is connected // 成功连接server.js
  1. 当成功连接server.js时,server.js的等待连接也会收到响应
PS E:\node\the_server> node .\server.js
1. server is running
2. server is connected to[object Object] // socket为一个Buffer对象

此时服务端和客户端的连接已经完成了.

传递数据

接下来就是传递数据

  1. 服务端 server.js
// 引入net模块
const net = require("net");

const port = 3000;
const host = "127.0.0.1";

// 创建个TCP服务
const server = net.createServer((socket) => {
	// 2. 等待连接,连接后触发 socket(Buffer)
	console.log("2. server is connected to" + socket);

	// 3. 收到client.js 的data请求
	socket.on("data", (data) => {
		console.log("3. server get client data: ", data.toString());
		// 写入并返回
		socket.write("this is server");
	});

});

// 1. 开启服务
server.listen(port, host, () => {
	console.log("1. server is running");
});

  1. 客户端 client.js
// 引入net模块
const net = require("net");

const port = 3000;
const host = "127.0.0.1";

// 创建连接
const client = net.createConnection(port, host, port);
// 1. 连接server,成功后触发
client.on("connect", () => {
	console.log("1. client is connected");
});

// 2. 请求data, 未传参数为Buffer
client.on("data", (data) => {
  // 3. 返回的
	console.log("2. client get server data:", data.toString());
});

client.end("this is client");

  1. 输出结果
// server.js
PS G:\vue-study\Node\server> node .\server.js
1. server is running
2. server is connected to[object Object]
3. server get client data:  this is client
// client.js
PS G:\vue-study\Node\server> node .\client.js
1. client is connected
2. client get server data: this is server
  1. 使用.end.write均可写入数据

关闭服务

  1. server.js
// 引入net模块
const net = require("net");

const port = 3000;
const host = "127.0.0.1";

const server = net.createServer((socket) => {
	// 2. 等待连接,连接后触发 socket(Buffer)
	console.log("2. server is connected to" + socket);

	// 3. 收到client.js 的data请求
	socket.on("data", (data) => {
		console.log("3. server get client data: ", data.toString());
		// 写入并返回
		socket.write("this is server");
	});

  // 客户端关闭触发
	socket.on("end", function () {
		console.log("4. 客户端关闭连接");
	});

  // 服务端关闭触发
	socket.on("close", () => {
		console.log("5. server is close");
	});
});

// 1. 开启服务
server.listen(port, host, () => {
	console.log("1. server is running");
});
  1. client.js
// 引入net模块
const net = require("net");

const port = 3000;
const host = "127.0.0.1";

// 创建连接
const client = net.createConnection(port, host, port);
// 1. 连接server,成功后触发
client.on("connect", () => {
	console.log("1. client is connected");
});

// 2. 请求data, 未传参数为Buffer
client.on("data", (data) => {
  // 3. 返回的
	console.log("2. client get server data:", data.toString());
});

client.end("this is client");

client.on("close", () => {
	console.log("3. client is closed");
});

  1. 输出
// server.js
PS G:\vue-study\Node\server> node .\server.js
1. server is running
2. server is connected to[object Object]
3. server get client data:  this is client
4. 客户端关闭连接
5. server is close
// client.js
PS G:\vue-study\Node\server> node .\client.js
1. client is connected
2. client get server data: this is server
3. client is closed
PS G:\vue-study\Node\server>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值