MST

星途 面试题库

面试题:Node.js中TCP Socket常见错误类型及基础处理方式

在Node.js的TCP Socket编程中,常见的错误类型有哪些?请至少列举3种,并简要说明如何对这些常见错误进行基础的错误处理。
26.7万 热度难度
前端开发Node.js

知识考点

AI 面试

面试题答案

一键面试

常见错误类型及处理方式

  1. ECONNREFUSED错误
    • 说明:尝试连接到一个拒绝连接的服务器时会发生此错误,通常是因为服务器未在指定端口监听。
    • 处理方式:在客户端代码中使用net.connect方法连接服务器时,监听error事件。例如:
const net = require('net');
const client = new net.Socket();
client.connect({ port: 8080, host: '127.0.0.1' }, () => {
    console.log('Connected to server!');
});
client.on('error', (err) => {
    if (err.code === 'ECONNREFUSED') {
        console.error('Connection refused. Is the server running?');
    } else {
        console.error('Other error:', err.message);
    }
});
  1. EADDRINUSE错误
    • 说明:当尝试在一个已经被其他进程占用的端口上启动服务器时会出现此错误。
    • 处理方式:在服务器端代码中使用net.createServer创建服务器并监听端口时,监听error事件。例如:
const net = require('net');
const server = net.createServer((socket) => {
    socket.write('Welcome!\n');
    socket.end('Goodbye!\n');
});
server.on('error', (err) => {
    if (err.code === 'EADDRINUSE') {
        console.error('Address already in use. Try another port.');
    } else {
        console.error('Other error:', err.message);
    }
});
server.listen(8080, '127.0.0.1', () => {
    console.log('Server listening on port 8080!');
});
  1. ECONNRESET错误
    • 说明:当远端套接字意外关闭连接时会发生此错误,可能是由于服务器崩溃、网络问题等原因。
    • 处理方式:在客户端和服务器端代码中,对net.Socket实例监听error事件。例如:
// 服务器端
const net = require('net');
const server = net.createServer((socket) => {
    socket.on('data', (data) => {
        console.log('Received: ', data.toString());
    });
    socket.on('error', (err) => {
        if (err.code === 'ECONNRESET') {
            console.error('Connection reset by peer.');
        } else {
            console.error('Other error:', err.message);
        }
    });
});
server.listen(8080, '127.0.0.1', () => {
    console.log('Server listening on port 8080!');
});

// 客户端
const client = new net.Socket();
client.connect({ port: 8080, host: '127.0.0.1' }, () => {
    client.write('Hello, server!');
});
client.on('error', (err) => {
    if (err.code === 'ECONNRESET') {
        console.error('Connection reset by server.');
    } else {
        console.error('Other error:', err.message);
    }
});
  1. EPIPE错误
    • 说明:当尝试向一个已关闭的管道(在TCP Socket中类似向已关闭连接的套接字写入数据)写入数据时会发生此错误。
    • 处理方式:在写入数据前,先检查套接字是否处于可写状态,或者在write方法调用后监听error事件。例如:
const net = require('net');
const client = new net.Socket();
client.connect({ port: 8080, host: '127.0.0.1' }, () => {
    if (client.writable) {
        client.write('Hello, server!');
    }
    client.write('This might cause EPIPE if the connection is closed.', (err) => {
        if (err && err.code === 'EPIPE') {
            console.error('EPIPE error: trying to write to a closed socket.');
        }
    });
});