const net = require('net');
const { Buffer } = require('buffer');
// 假设消息头为4字节,存储消息体的长度
function readHeader(socket) {
let headerBuffer = Buffer.alloc(4);
let received = 0;
return new Promise((resolve, reject) => {
const readHandler = socket.on('data', (chunk) => {
chunk.copy(headerBuffer, received, 0, chunk.length);
received += chunk.length;
if (received === 4) {
socket.removeListener('data', readHandler);
const msgLength = headerBuffer.readUInt32BE(0);
resolve(msgLength);
}
});
socket.on('end', () => {
reject(new Error('Socket ended before receiving complete header.'));
});
});
}
async function readMessage(socket, msgLength) {
let messageBuffer = Buffer.alloc(msgLength);
let received = 0;
return new Promise((resolve, reject) => {
const dataHandler = socket.on('data', (chunk) => {
let chunkLength = Math.min(chunk.length, msgLength - received);
chunk.copy(messageBuffer, received, 0, chunkLength);
received += chunkLength;
if (received === msgLength) {
socket.removeListener('data', dataHandler);
resolve(messageBuffer);
}
});
socket.on('end', () => {
reject(new Error('Socket ended before receiving complete message.'));
});
});
}
const server = net.createServer(socket => {
console.log('Client connected.');
(async function handleMessages() {
try {
while (true) {
const msgLength = await readHeader(socket);
const message = await readMessage(socket, msgLength);
console.log(`Received message: ${message.toString()}`);
}
} catch (error) {
console.error(error.message);
socket.end();
}
})();
socket.on('end', () => {
console.log('Client disconnected.');
});
});
server.listen(3000, () => {
console.log('Server listening on port 3000');
});