咱们可使用node.js
当中内置的net
模块来建立socket
服务端和socket
客户端,实现一个简单的基于控制台的点对点通讯。node
net
模块创建socket
客户端const net = require('net');
const client = net.connect({port:number,host:string},()=>{ });
其中port
参数填写数值类型的服务端的端口号,host
参数填写字符串类型的服务端的IP
地址。若host
参数不写,则默认与本机上的指定端口创建链接。当这个新建的客户端与指定的服务端创建了链接以后,触发该回调函数,该回调函数没有参数,回调函数内部用自定义的变量client
来表明这个客户端。服务器
在该客户端与服务端完成链接创建的回调函数以内,使用client.write();
能够完成从客户端向服务端发送数据,使用client.on('data',(chunk)=>{});
能够接收服务端发送的数据,当接收到服务端发送的数据时触发该回调函数,chunk.toString()
便可获取服务端发送的数据内容。
如下为client.js
的示例代码:socket
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
服务端const net = require('net');
socket
服务端const server = net.createServer((socket)=>{ });
这里表示建立了一个socket
服务器,并用一个自定义的server
变量来接收,当有客户端与该服务端创建链接时,会触发执行该回调函数,而且回调函数内部使用指定的形参socket
对象。函数
socket
服务端监听一个指定的端口。建立完socket服务端以后,必须让其监听该操做系统上的某一个特定端口,不然没有任何意义。ui
var port = 2080; server.listen(port,(err)=>{ if(err){ console.log('该端口被占用!'); return false; }; console.log(`服务端正常启动,监听${port}端口!`); });
为了不出现端口被占用的状况出现,能够令
port=0;
,0不是一个标准的端口号,传0的效果为系统会随机分配一个当前操做系统当中未被占用的端口号。spa
在第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
文件,接下去便可在两个端之间实现基于控制台的点对点收发消息。以下图所示。code