NodeJS学习之路(一)之net模块

net模块是用于创建基于流的TCP活IPC的服务器和客户端,使用时使用require引入:var net = require("net");

我们先来说一下TCP与ICP的异同:

TCP/IP-传输控制协议/网际协议地址;可在同一台机器或不同机器或不同操作系统的进程间进行通信;

IPC (Inter Process Communication) 即进程间通信;不能跨物理机器,只能在同一台机器上的不同进程间进行通信;

在同一台机器上的两个进程间进行通信两者都可以使用,但是IPC效率会高于TCP/IP,原因:前者是直接把通讯包给另一个进程,后者是先把通讯包给本地环路接口,再从接口给另一个进程;

Net模块主要是两个类:Server、Socket

一、net.Server类

用于创建服务端
1)    创建Server:var server = net.Server();
2)    监听已有的连接:server.listen(端口号,ip);
3)    监听事件使用on:
         事件有: listening:当服务绑定后触发
                        connection:当一个新的connection(连接)建立的时候触发,有参数socket
                        close: 当server关闭的时候触发,注意要等到所有的连接都结束之后才触发
                        error: 当错误出现的时候触发

4)    方法:
                  listen:监听已有的连接
                  close:关闭连接
                  address:返回绑定的地址,只有在listening事件被触发的时候菜可以调用该事件,不然返回的是一个空对象。
 

二、net.socket类

可以由用户创建并直接与服务器交互。
1)    创建一个连接:net.connect(端口号,ip); 
2)    监听事件使用on:
         事件有: connect:当一个socket连接成功建立的时候触发该事件
                        data:当接收到数据的时候触发该事件,数据编码由 socket.setEncoding() 设置
                        end: 关闭连接
                        timeout:连接超时触发
                        error:
3)    方法:
                 connect(端口,IP):创建连接
                 write(内容,编码格式-默认UTF8):在socket上发送数据
                 setTimeout():设置超时时长

4)    属性:
                 localPort:用数字表示本地端口。例如80或21
                 localAddress:返回操作系统报告的 socket 的地址、地址族和端口。返回的对象有三个属性,例如: { port: 12346, family: 'IPv4', address: '127.0.0.1' }
                remotePort:用数字表示远程端口
                remoteAddress:用字符串表示远程IP地址

三、一个简单的实例

服务端与客服端进行连接,发送消息

server.js

var net  = require("net");  //引入net模块

var server = net.createServer();  //创建一个Server对象

server.listen('12306','127.0.0.1'); //监听已有的连接

//一些事件
server.on('listening',function () {  //的那个服务绑定后触发
    console.log('服务器已启动');
});

server.on('connection',function (socket) { //当一个新的连接建立时触发,可接收一个socket对象
    console.log('有新的连接!');

    socket.on('data',function (data) {
        console.log(data.toString());
        socket.write('你好啊,客户端');
        socket.write('客户端,请关闭连接~');
    })

    server.close();
})

server.on('close',function () {  //关闭连接时触发
    console.log('连接已关闭');
})

client.js

var net  = require("net");  //引入net模块

var socket = net.connect('12306','127.0.0.1'); //客户端创建一个连接

//失败事件
socket.on('error',function () {
    console.log("连接失败");
})

socket.on('connect',function () {   //连接成功时触发
    console.log("连接服务器成功!");
    socket.write("你好啊,服务器");

    socket.on('data',function (data) { //接收到数据的时候触发
        console.log(data.toString());
        socket.end();
    })
})
socket.on('end',function () {
    console.log('我已主动关闭连接成功');
})

使用webStrom运行结果

 

  • 3
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值