Node.js net模块

举报
福州司马懿 发表于 2021/11/19 03:05:59 2021/11/19
【摘要】 Node.js Net 模块提供了一些用于底层的网络通信的小工具,包含了创建服务器/客户端的方法。 var net = require('net'); var clientList = []; //...

Node.js Net 模块提供了一些用于底层的网络通信的小工具,包含了创建服务器/客户端的方法。

var net = require('net');

var clientList = [];

//服务端
var netServer = net.createServer().on('connection', function(client) {
    //js可以自由给对象添加属性。ip地址默认是IPv6,客户端会启用一个随机的端口
    client.name = client.remoteAddress + '_' + client.remotePort;//ip地址是::ffff:127.0.0.1
    console.log('client.name = ' + client.name);
    console.log('net.isIP(client.remoteAddress) = ' + net.isIPv4(client.remoteAddress));//6, isIP判断地址是否是ip地址,如果是IPv4,则返回4;如果是IPv6,则返回6;如果是无效字符串则返回0。
    console.log('net.isIPv4(client.remoteAddress) = ' + net.isIPv4(client.remoteAddress));//false
    console.log('net.isIPv6(client.remoteAddress) = ' + net.isIPv6(client.remoteAddress));//true
    clientList.push(client);
    console.log('current client count = ' + clientList.length);
    //异步获取服务器当前活跃连接的数量,当socket发送给子进程后才有效。
    netServer.getConnections(function(err, count){
        if(err) {
            return console.error(err);  
        }
        console.log("net server getConnections = " + count);
    });
    client.on('data', function(chunk) {
        for(var i=0;i<clientList.length;i++) {
            if(client === clientList[i]) {
                //检查socket是否可写,如果不可写就直接销毁
                if(client.writable) {
                    client.write('\n'+client.name + " say : " + chunk+'\n');
                } else {
                    clientList.splice(clientList.indexOf(client), 1);
                    client.destroy();
                }
            }
        }
    }).on('end', function(){
        console.log('client quit, ' + client.name);
        clientList.splice(clientList.indexOf(client), 1);
        console.log('current client count = ' + clientList.length);
    }).on('error', function(e){
        console.error(e);
        //console.error(e.message);
    });
    client.write('Hi!\n');
    client.write('Hello World\n');
    client.write('Bye!\n');
    //服务端结束本次会话
    //client.end();
}).on('listening', function(){
    console.log('net server start listening...');
}).on('close', function(){
    console.log('net server is closed...');
}).on('error', function(e){
    console.log(e.message)
}).listen(8080);

//客户端
net.connect({host:'127.0.0.1', port:'8080'}, function(){
    console.log('客户端已连接上服务器');
}).on('data', function(chunk){
    //收到的数据默认是Buffer类型的,要使用toString()转化。但如果使用'+'和string连接,则会因为操作符被强制转化为string
    //console.log(chunk.toString());
    console.log('receivedData = ' + chunk);
}).on('end', function(){
    console.log('客户端已断开连接')
});
  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64

Telnet 也可以作为 “net模块” 的客户端。

telnet 127.0.0.1 8080
  
 
  • 1

这里写图片描述

文章来源: blog.csdn.net,作者:福州-司马懿,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/chy555chy/article/details/52527201

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。