Node.js net模块
【摘要】
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)