nodejs 构建tcp服务器,客户端

tcp服务器实现

const net = require('net');
const server = net.createServer();
const OPTION = {
    SOCKET: {
        port: 3000,
        host: '192.168.1.110',
        timeout:60000,
        keepAliveTime:10000
    }
}
let socketArr = [];
server.on('connection',(socket) => {
    console.log(`socketConnect:${socket.remoteAddress}:${socket.remotePort}`);
    socketArr.push(socket);
    // socket.setEncoding('utf8');
    socket.setTimeout(OPTION.timeout);
    socket.setKeepAlive(true,OPTION.keepAliveTime);//keep net alive
    socket.on('data', function(data) {
        console.log(`DATA ${socket.remoteAddress}`);
        // JSON.stringify(myObj);
    });
    socket.on('timeout',() => {
        // sock.write('connect timeout,disconnecting,bye!');
        // socket.end();
    });

    socket.on('close', function() {
        let index = socketArr.indexOf(socket);
        socketArr.splice(index,1);
        console.log(`socketClose:${socket.remoteAddress}:${socket.remotePort}`);
    });

    socket.on('end', () => {
        console.log('client disconnected');
    });
    socket.on('error',(err) => {
        console.log(err);
    });
});
server.on('error', (err) => {
    console.log(err);
});
server.on('close',() => {
    console.log('server closed!');
});
server.listen(OPTION.port, () => {
    console(`socke server start! listen port ${OPTION.port}`);
});

exports.broadcast =  (data) => {
    try {
        for (let v of socketArr) {
            if (Buffer.isBuffer(data)) {
                v.write(data);
            }
        }
    } catch (err) {

    }
};

tcp客户端

const net = require('net');
const client = new net.Socket();

const OPTION = {
    timeout:500,
    encoding:'utf8',
    tcpOption:{
        port:8080,
        host:'192.168.1.121'
    },
    retriedTimes:0,
    maxReTries:100,
    retryInterval:1000
};

client.setTimeout(OPTION.timeout);
client.setEncoding(OPTION.encoding);
client.on('data', data => {
    console.log('DATA: ' + data);
    // client.destroy();// close connect
});

client.on('end',() => {
    console.log('Client disnected');
});

client.on('close', () => {
    infoLogger.warn('tcp connection closed');
    reConnect()
});

client.on('error',err => {
    // infoLogger.error(err);
});
client.on('timeout',() => {

});

function conncect() {
    client.connect(OPTION.tcpOption,() => {
        OPTION.retriedTimes = 0;
        infoLogger.info(`tcp conncet success!--->local:${client.localAddress}:${client.localPort}=>remote:${client.remoteAddress}:${client.remotePort}`);
        client.write('this is tcp client by Node.js');//服务器向客户端发送消息
    });

}
//Reconnect server
function reConnect() {
    if (OPTION.retriedTimes >= OPTION.maxReTries) {
       console.log('Max retries have been exceeded,I give up.');
    } else {
        OPTION.retriedTimes += 1;
        console.log(`connect:${OPTION.retriedTimes}`);
        setTimeout(conncect,OPTION.retryInterval);
    }
}

conncect();

module.exports = client;

猜你喜欢

转载自blog.csdn.net/qq_35014708/article/details/88536974