我们可以使用node.js当中内置的net模块来创建socket服务端和socket客户端,实现一个简单的基于控制台的点对点通信。

一、利用net模块建立socket客户端

1、引包
const net = require('net');
2、与指定IP地址和端口号的服务端建立连接
const client = net.connect({port:number,host:string},()=>{

});

其中port参数填写数值类型的服务端的端口号,host参数填写字符串类型的服务端的IP地址。若host参数不写,则默认与本机上的指定端口建立连接。当这个新建的客户端与指定的服务端建立了连接之后,触发该回调函数,该回调函数没有参数,回调函数内部用自定义的变量client来代表这个客户端。

3、客户端与服务端收发数据

在该客户端与服务端完成连接建立的回调函数之内,使用client.write();可以完成从客户端向服务端发送数据,使用client.on('data',(chunk)=>{});可以接收服务端发送的数据,当接收到服务端发送的数据时触发该回调函数,chunk.toString()即可获取服务端发送的数据内容。
以下为client.js的示例代码:

const readline = require('readline');
const net = require('net');
const rl = readline.createInterface(process.stdin,process.stdout);
const client = net.connect({port:2080,host:'192.168.155.1'},()=>{
    rl.on('line',(line)=>{
        client.write(line.trim());
    });
    client.on('data',(chunk)=>{
        console.log(chunk.toString());
    });
});

二、利用net模块建立socket服务端

1、引包
const net = require('net');
2、创建一个socket服务端
const server = net.createServer((socket)=>{

});

这里表示创建了一个socket服务器,并用一个自定义的server变量来接收,当有客户端与该服务端建立连接时,会触发执行该回调函数,并且回调函数内部使用指定的形参socket对象。

3.让新创建的socket服务端监听一个指定的端口。

创建完socket服务端之后,必须让其监听该操作系统上的某一个特定端口,否则没有任何意义。

var port = 2080;
server.listen(port,(err)=>{
    if(err){
        console.log('该端口被占用!');
        return false;
    };
    console.log(`服务端正常启动,监听${port}端口!`);
});

为了避免出现端口被占用的情况出现,可以令port=0;,0不是一个标准的端口号,传0的效果为系统会随机分配一个当前操作系统当中未被占用的端口号。

在第2步的回调函数当中,使用socket.remoteAddress可以得到与本机相连接的那个远端客户端的IP地址,使用socket.remotePort可以得到与本机相连接的那个远端客户端的端口号,使用socket.localAddress可以得到本机的IP地址,使用socket.localPort可以得到该socket服务器所使用的端口号。
使用socket.write();可以完成从服务端向客户端发送数据,使用socket.on('data',(chunk)=>{});可以接收客户端发送的数据,当接收到客户端发送的数据时触发该回调函数,chunk.toString()即可获取客户端发送的数据内容。
以下为socket.js的示例代码:

const net = require('net');
const readline = require('readline');
const rl = readline.createInterface(process.stdin,process.stdout);
const server = net.createServer((socket)=>{
    rl.on('line',(line)=>{
        socket.write(line.trim());
    });
    socket.on('data',(chunk)=>{
        console.log(chunk.toString());
    });
});
var port = 2080;
server.listen(port,(err)=>{
    if(err){
        console.log('该端口被占用!');
        return false;
    };
    console.log(`服务端正常启动,监听${port}端口!`);
});

先在控制台上启动server.js,然后再启动client.js文件,接下去即可在两个端之间实现基于控制台的点对点收发消息。如下图所示。

图片描述


倩儿爱甜食
477 声望62 粉丝

一切都是最好的安排 ^-^ !