面试题答案
一键面试- 引入模块:
- 对于TCP服务器,引入
net
模块。示例代码:
const net = require('net');
- 对于UDP服务器,引入
dgram
模块。示例代码:
const dgram = require('dgram');
- 对于TCP服务器,引入
- 创建服务器实例:
- TCP服务器:
- 使用
net.createServer()
方法创建TCP服务器实例。该方法接受一个回调函数,此回调函数在每次有新的客户端连接时被调用。示例代码:
const server = net.createServer((socket) => { // 处理客户端连接逻辑 });
- 使用
- UDP服务器:
- 使用
dgram.createSocket()
方法创建UDP服务器实例。可以传入udp4
或udp6
指定协议版本,也可以省略,默认udp4
。示例代码:
const server = dgram.createSocket('udp4');
- 使用
- TCP服务器:
- 监听端口:
- TCP服务器:
- 使用
server.listen()
方法监听指定端口。示例代码:
const port = 3000; server.listen(port, () => { console.log(`TCP server listening on port ${port}`); });
- 使用
- UDP服务器:
- 使用
server.bind()
方法监听指定端口。示例代码:
const port = 4000; server.bind(port, () => { console.log(`UDP server listening on port ${port}`); });
- 使用
- TCP服务器:
- 处理客户端连接:
- TCP服务器:
- 在
net.createServer()
的回调函数中处理客户端连接。例如,可以监听data
事件获取客户端发送的数据,end
事件表示客户端断开连接。示例代码:
const net = require('net'); const server = net.createServer((socket) => { socket.on('data', (data) => { console.log('Received data from client:', data.toString()); socket.write('Message received by server!'); }); socket.on('end', () => { console.log('Client disconnected'); }); }); const port = 3000; server.listen(port, () => { console.log(`TCP server listening on port ${port}`); });
- 在
- UDP服务器:
- 监听
message
事件来处理接收到的UDP数据包。此事件的回调函数接收两个参数:msg
(接收到的数据)和rinfo
(发送方的地址信息)。示例代码:
const dgram = require('dgram'); const server = dgram.createSocket('udp4'); server.on('message', (msg, rinfo) => { console.log('Received message from', rinfo.address, ':', msg.toString()); const response = 'Message received by server!'; server.send(response, 0, response.length, rinfo.port, rinfo.address, (err) => { if (err) { console.error(err); } }); }); const port = 4000; server.bind(port, () => { console.log(`UDP server listening on port ${port}`); });
- 监听
- TCP服务器: