服务器与客户端之间的通信必不可少,接下来的文章陆续介绍TCP、UDP、Http以及Websocket等协议方式,会简单介绍它们的原理特点与不同。
本篇介绍TCP传输协议:是一种可靠的长连接数据传送方式。应用层要发送的数据会被切割成“段”,然后进行发送。关于TCP连接的建立,一般会经历3次握手。
先安装net模块
服务端项目代码如下:
/**
* TCP服务端
*/
const net = require("net");
var clientIndex = 0;
//服务器创建
const server = net.createServer((client)=>{
clientIndex++;//有新的客户端连接时,编号自增加1
console.log("第"+clientIndex+"编号客户端已连接");
//监听客户端发来数据消息
client.on("data",(data)=>{
console.log("编号:"+clientIndex+"客户端发来数据:"+data.toString());
});
client.on("end",()=>{
console.log("编号:"+clientIndex+"客户端已断开连接!");
});
//服务端回应客户端数据消息并发送
client.write("编号:"+clientIndex+"客户端,你好!\r\n");
//client.pipe(client);
});
//服务器错误异常监听
server.on("error",(err)=>{
console.error(err.message);
if(err) throw err;
});
//当一个新的连接建立时被触发
server.on("connection",()=>{
});
//当服务器关闭时被触发。如果有连接存在,则直到所有连接结束才会触发这个事件。
server.on("close",()=>{
});
//绑定端口、地址簇、ip地址
// server.address(8080,"IPv4","127.0.0.1");
server.listen(8234,()=>{
console.log("TCP服务器已开启");
});
// server.close();
客户端项目代码如下:
/**
* Tcp客户端
*/
//加载net模块
const net = require("net");
//创建客户端
var client = net.createConnection();
//连接服务端,并发送数据
client.connect(8234,"127.0.0.1",()=>{
console.log("连接到服务器");
client.write("我是一个客户端!");
});
//监听服务器返回的数据
client.on("data",(data)=>{
console.log("服务器返回的数据:",data.toString());
});
//当Socket的另一端发送一个FIN包时触发该事件,从而结束Socket的可读端。
client.on("end",()=>{
console.log("数据结束");
});
//错误
client.on("error",(err)=>{
console.error("连接错误:"+err.message);
});
//超时
client.on("timeout",()=>{
console.error("连接超时!");
});
//当一个Socket连接成功建立时触发该事件
client.on("connect",()=>{
});
client.on("close",()=>{
console.log("连接关闭!");
});
运行结果如下:
【服务端】
【客户端】