当前位置: 首页 > 工具软件 > Keen.js > 使用案例 >

Node.js 搭建TCP服务器

蒋高超
2023-12-01

概述

TCP协议就是位于传输层的协议。Node.js在创建一个TCP服务器的时候使用的是net(网络)模块

创建TCP服务

使用Node.js创建TCP服务器,首先要引用net模块,之后使用net模块的createServer方法就可以创建一个TCP服务器.
使用TCP服务器的listen方法就可以开始监听客户端的连接.

server.listen(port[,host][,backlog][,callback]);

  • port参数为需要监听的端口号,参数值为0的时候将随机分配一个端口号。
  • host为服务器地址。
  • backlog为等待队列的最大长度
  • callback为回调函数

下面代码构建一个TCP服务器:

//引入net模块
const net=require('net');
//创建TCP服务器
let server=net.createServer(function(socket){
    console.log('someone connets');
})
//监听客户端的连接
server.listen(18001,function(){
    
    console.log('server is listening');
});

TCP服务端API

回调事件

支持如下回调事件:

  • connection:当前新的链接创建时触发,回调函数的参数为socket连接对象,同net.createServer的第二个函数参数。
  • close:TCP服务器关闭的时候触发,回调函数没有参数
  • error:TCP服务器发生错误的时候触发,回调函数的参数为error对象
  • listening:调用server.listen时触发的回调
//设置监听时的回调函数
server.on('listening',function(){
    console.log('server is listening');
});

//设置关闭时的回调函数
server.on('close',function(){
    console.log('sever closed');
});


//设置出错时的回调函数
server.on('error',function(){
    console.log('error');
});

连接服务器的客户端数量

在创建一个TCP服务器的基础下,可以通过server.getConnection()方法获取连接这个TCP服务器的客户端数量。这个方法是一个异步的方法,回调这个函数有两个参数:

  • 第一个参数为error对象
  • 第二个参数为连接TCP服务器的客户端数量。

除了获取连接数量外,也可以通过设置TCP服务器的maxConnections属性来设置这个TCP服务器最大连接数量。如果当连接的数量超过最大的数量的时候,服务器会拒绝新的连接。

在下面的代码中设置创建这个TCP服务器的最大连接数量为3:

var net=require('net');
//创建服务器
var server=net.createServer(function(socket){
    console.log('someone connects');
    //设置连接最大数量
    server.maxConnection=3;
    server.getConnections(function(err,count){
        console.log('the count of clieent is'+count);
    });
});
//设置监听端口
server.listen(18001,function(){
    
    console.log('server is listening');
});

获取客户端发送的数据

createServer方法的回调函数参数是一个net.Socket对象(服务器所监听的端口对象),这个对象同样也有一个address方法,用来获取TCP服务器绑定的地址,同样也返回一个含有port、family、address属性的对象。

  //监听dada事件
    socket.on('data',function(data){
        
        //打印data
        console.log(data.toString());
    });

socket对象除了有data事件外,还有connect,end、error、timeout等事件

发送数据给客户端

使用socket.write方法可以使TCP服务器发送数据。这个方法只有一个必须参数,就是需要发送的数据;第二个参数为编码格式,可选,同时,可以为这个方法设置一个回调函数,当有用户连接TCP服务器的时候,将发送数据给客户端

 //发送数据
   socket.write(message,function(){
       
       var writeSize=socket.bytesWritten;
       
       console.log(message+'has send');
       console.log('the size of message is'+writeSize);
   });

运行这段代码并连接TCP服务器,可以看到Telnet中收到了TCP服务器发送的数据,Telnet也可以发送数据给TCP服务器
这段代码中还用到了socket对象的bytesWritten和byteRead属性,这两个属性分别代表着发送数据的字节数和接收数据的字节数。

var net=require('net');

//创建服务器
var server=net.createServer(function(socket){
   
   //获取地址信息
   var address=server.address();
   var message='client,the server address is'+JSON.stringify(address);
   //发送数据
   socket.write(message,function(){
       
       var writeSize=socket.bytesWritten;
       
       console.log(message+'has send');
       console.log('the size of message is'+writeSize);
   });
   
   //监听dada事件
   socket.on('data',function(data){
       
       //打印data
       console.log(data.toString());
       var readSize=socket.bytesRead;
       console.log('the size of data is'+readSize);
   });
});
//设置监听端口
server.listen(18001,function(){
   
   console.log('server is listening');
});
 类似资料: