我们可以使用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
文件,接下去即可在两个端之间实现基于控制台的点对点收发消息。如下图所示。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。