node.js学习笔记之创建TCP客户端

本文介绍了一个简单的TCP服务器与客户端的交互过程,包括如何建立连接、发送与接收数据,以及处理错误和关闭连接的方法。此外,还展示了如何通过socket端口发送文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

server.js

/*创建TCP服务器*/
var net = require('net');
var server = net.createServer();
server.on('connection',function (socket) {
    socket.setEncoding('utf8');
    console.log('客户端与服务端链接已建立');
    socket.on('data',function (data) {
        console.log('已收到客户端发来的数据:'+data);//控制台输出
        socket.write('确认数据:'+data);//发送给客户端
    });
    //监听与客户端连接的错误事件
    socket.on('error',function (err) {
        console.log('与客户端通信或链接过程中发生了一个错误,错误代码为:%s',err.code);
        //当发生错误时,用destroy方法销毁该socket端口。确保不会再被利用
        socket.destroy();
    })
    //监听客户端的end事件
    socket.on('end',function () {
        console.log('客户端连接被关闭')
        //默认情况下,运行TCP服务器的应用程序不会自动退出,即使客户端全部关闭。
        //我们可以使用server.unref();方法退出应用程序
        //当时用unref()方法后,我们可以用server.ref();方法阻止应用程序的推出
        server.unref();
    });
    //当socket端口彻底关闭时,触发socket端口的close事件
    socket.on('close',function (had_error) {
        if(had_error){
            console.log('由于一个错误导致socket端口被关闭');
            server.unref();
        }else {
            console.log('socket端口被正常关闭')
        }
    });

    server.getConnections(function (err, count) {
        if(count == 2)
            server.close();
    })
});
server.listen(3000,'localhost');
//当所有客户端连接被关闭后,TCP服务器被自动关闭
server.on('close',function () {
    console.log('TCP服务器被关闭');

})
client.js:

/*创建TCP客户端*/

var net = require('net');
//创建TCP客户端
var client = new net.Socket();
client.setEncoding('utf8');
client.connect(3000,'localhost',function () {
    console.log('已连接到服务器');
    client.write('你好');
    //指定10秒后关闭与服务器的连接
    setTimeout(function () {
        //客户端的socket端口对象可以调用end方法来结束与服务端的连接,同时服务端添加end事件的监听事件即可。
        client.end('再见','utf8');
    },10000);
});
client.on('data',function (data) {
    console.log('已接受服务器端发送的数据:'+data);
});
//监听与服务端连接的错误事件
client.on('error',function (err) {
    console.log('在于服务器连接或通信过程中发生了一个错误,错误代码为%s',err.code);
    //当发生错误时,用destroy方法销毁该socket端口。确保不会再被利用
    client.destroy();
})
当同时开启两台客户端时运行结果:



使用socket端口对象的write方法发送小尺寸文件
server.js:

/*使用socket端口对象的write方法发送小尺寸文件*/

var net = require('net');
var server = net.createServer();
var fs = require('fs');
server.on('connection',function (socket) {
    console.log('客户端与服务端链接已建立');
    socket.setEncoding('utf8');
    var readStream = fs.createReadStream('./test.txt');
    readStream.on('data',function (data) {
        var flag = socket.write(data);
        console.log('write方法返回的值为:'+flag);
        console.log('缓存队列当前缓存了%d字符',socket.bufferSize);
    })
    socket.on('data',function (data) {
        console.log('已接收客户端发送的数据:')
    });
    socket.on('drain',function () {
        console.log('TCP缓存区中数据已全部发送。');
    });
    //监听客户端的end事件
    socket.on('end',function () {
        console.log('客户端连接被关闭')
        //默认情况下,运行TCP服务器的应用程序不会自动退出,即使客户端全部关闭。
        //我们可以使用server.unref();方法退出应用程序
        //当时用unref()方法后,我们可以用server.ref();方法阻止应用程序的推出
        server.unref();
    });
});
server.listen(3000);
client.js:

var net = require('net');
var client = new net.Socket();
client.setEncoding('utf8');
client.connect(3000,'localhost',function () {
    console.log('已连接到客户端');
    client.write('您好');
    //指定10秒后关闭与服务器的连接
    setTimeout(function () {
        //客户端的socket端口对象可以调用end方法来结束与服务端的连接,同时服务端添加end事件的监听事件即可。
        client.end('再见','utf8');
    },10000);
});
client.on('data',function (data) {
    console.log('已收到服务端发来的数据')
    console.log(data);
});

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值