如何使用Nodejs来创建一个TCP服务
在这之前咱们要先来了解一下Socket的概念,
我们经常把socket翻译为套接字,socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用已实现进程在网络中通信, 比如create,listen,accept,connect,read和write等等。
node里有各种网络相关的模块, http为应用层模块,主要按照特定协议编解码数据;net为传输层模块,主要负责传输编码后的应用层数据;https是个综合模块(涵盖了http/tls/crypto等),主要用于确保数据安全性
- 创建tcp服务端
1const net = require('net');23const HOST = '127.0.0.1';4const PORT = 7777;56// 创建一个TCP服务器实例,调用listen函数开始监听指定端口7// net.createServer()有一个参数, 是监听连接建立的回调8net.createServer((socket) => {9 const remoteName = `${socket.remoteAddress}:${socket.remotePort}`;10 // 建立成功了一个连接, 这个回调函数里返回一个socket对象.11 console.log(`${remoteName} 连接到本服务器`);1213 // 接收消息14 socket.on('data', (data) => {15 console.log(`${remoteName} - ${data}`)16 // 给客户端发消息17 socket.write(`你刚才说啥?是${data}吗?`);18 });1920 // 关闭21 socket.on('close', (data) => {22 console.log(`${remoteName} 连接关闭`)23 });2425}).listen(PORT, HOST);2627console.log(`Server listening on ${HOST}:${PORT}`);
- 创建tcp客户端
1const net = require('net');23const HOST = '127.0.0.1';4const PORT = 7777;56const client = new net.Socket();7const ServerName = `${HOST}:${PORT}`;8let count = 0;910client.connect(PORT, HOST, () => {11 console.log(`成功连接到 ${ServerName}`);12 // 向服务端发送数据13 const timer = setInterval(() => {14 if (count > 10) {15 client.write('我没事了, 告辞');16 clearInterval(timer);17 return;18 }19 client.write('马冬梅' + count++);20 }, 1000)21});2223// 接收消息24client.on('data', (data) => {25 console.log(`${ServerName} - ${data}`);26 // 关闭连接27 // client.destroy();28});2930// 关闭事件31client.on('close', () => {32 console.log('Connection closed');33});3435client.on('error', (error) => {36 console.log(error);37})
- 运行一下
node tcp-server.js
node tcp-client.js
如何使用NodeJs来创建一个UDP服务?
- 创建udp服务端
1const dgram = require('dgram');2const server = dgram.createSocket('udp4');34server.on('message', (msg, remote) => {5 console.log(`${remote.address}:${remote.port} - ${msg}`)6 server.send(`收到!`, remote.port, remote.address);7})89server.on('listening', () => {10 const address = server.address()11 console.log(`Server listening on ${address.address}:${address.port}`);12})131415server.bind(44444);
- 创建udp客户端
1const dgram = require('dgram')2const message = Buffer.alloc(5, 'john')3const client = dgram.createSocket('udp4')45client.send(message, 0, message.length, 44444, 'localhost',6 (err, bytes) => {7 console.log(`发送成功${bytes}字节`);8 // client.close()9 }10)1112client.on('message', (buffer) => {13 console.log(buffer.toString())14})
- 运行一下
node udp-server.js
node udp-client.js