NodeJS学习之路(一)之net模块_Running_96的博客-程序员秘密

技术标签: node  

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运行结果

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/banana960531/article/details/89043761

智能推荐

结对编程_weixin_30555515的博客-程序员秘密

结对编程(英语:Pair programming)是一种敏捷软件开发的方法,两个程序员在一个计算机上共同工作。一个人输入代码,而另一个人审查他输入的每一行代码。输入代码的人称作驾驶员,审查代码的人称作观察员(或导航员)。两个程序员经常互换角色。 在结对编程中,观察员同时考虑工作的战略性方向,提出改进的意见,或将来可能出现的问题以便处理。这样使得驾驶者可以集中全部注意力在完成当前任务的“战术”方面...

[serviceMesh]iptables,cilium,ebpf学习_搬砖使我快乐!的博客-程序员秘密

serviceMeshA Service Mesh is adedicated infrastructure layerfor handling service-to-service communication. It’s responsible for the reliable delivery of requests through the complex topology of services that comprise a modern, cloud native application..

python是一种跨平台、开源、免费的高级动态编程语言吗_智慧职教: §Python是一门跨平台、开源、免费的解释型高级动态编程语言。..._李大帝的博客-程序员秘密

智慧职教: §Python是一门跨平台、开源、免费的解释型高级动态编程语言。答:正确肾小球的毛细血管为连续毛细血管。答:错A注册会计师审计X公司2019年度财务报表。在下列情况中,表明X公司违反了交易、事项的发生认定答:X公司向乙公司发出商品后,在合同约定的无条件退货期满之前确认了营业收入雨课堂: (2)已知输入为中频小信号,画直流通路时,_____答:无内阻的信号源视为短路 电容视为开路哪种结...

指针_zoudingrong的博客-程序员秘密

#include<bits/stdc++.h>using namespace std;int main(){ int a=10; int *pp=&a; cout<<*pp<<" "<<a<<endl; *pp=18; cout<<*pp<<" "<<a<<endl; return 0;}运行结果 10 10 18 18...

如何在Power Virtual Agents中使用Power Automate_创新教学的博客-程序员秘密

如何在Power Virtual Agents中使用PowerAutomate。我们以通过在PVA聊天机器人的对话框中输入“发布通知”后会把预设好的通知信息自动发布到Teams中的某个团队中。

JAVA课后作业 第二章 java编程基础_案例2-2小明都可以买什么_梦里再爱一次的博客-程序员秘密

小明都可以买什么编写一个智能购物的小程序商品名称价格书本12铅笔1橡皮2可乐3零食5假如小明带了20元,且必须购买一本书,剩余的钱还可以购买那种商品,可以购买几件,购买完还剩余多少钱?package com.company;import java.util.Scanner;public class xiaoming { public static void main(String[] args) { Scanner

随便推点

双非考研上岸中国传媒大学通信(电子信息)的一路历程(考研经验帖)_望豪骏的博客-程序员秘密

双非考研上岸中国传媒大学通信(电子信息)的一路历程(考研经验帖)写在前面的话择校-关于中国传媒大学初试的复习初试复习-关于信号与系统初试复习-关于英语(可跳过哈)初试复习-关于政治(也可跳过哈哈)初试复习-关于数学(反面教材哈哈哈)复试的复习复试的科目复试的流程复试的准备建议结束语写在前面的话这是一篇万字长文,是自己整个过去一年多准备中国传媒大学考研过程中的切实体会和实际经验,全文干货量爆炸,包含初试、复试诸多细节,耐心观看哈。拟录取的通知前几天下来了,一颗悬了一年多的心也终于放下了了,其实去年刚刚开

CentOS的MySQL远程连接ERROR 2003 (HY000):Can't connect to MySQL server on'XXXXX'(111) 的问题_Amrecs的博客-程序员秘密

   今天在CentOS7虚拟机上安装了mysql,想要在宿主机上远程连接,结果一直报错,就百度了原因,这里分享一篇博客以及自己的一点知识。   引用:问题描述:从一台linux远程连接另一台linux上的MySQL, 出现ERROR 2003 (HY000): Can't connect to MySQL server on 'xxx.xxx.xxx.85'(111)错误。[[email protected]

Java InputStream.read()读取数据流字节,存储到缓冲区数组_inputstream.read java_cainiao_23333的博客-程序员秘密

定义public abstract int read()public int read(byte[] b)public int read(byte[] b,int off,int len)参数:b:存储读入数据的缓冲区;off:数组 b 中将写入数据的初始偏移量;len:要读取的最大字节数返回:读入缓冲区的总字节数;如果因为已经到达流末尾而不再有数据可用,则返回 -1。异常抛出:IOException: 如果不是因为流位于文件末尾而无法读取第一个字节;如果输入..

电脑桌面点什么都是计算机,电脑桌面总是弹出广告怎么办?教你2种方法,轻松解决..._胡湘铭的博客-程序员秘密

平常我们在使用电脑时,总会出现很多的弹窗广告,点关闭按钮直接就进入了广告,每次都要浪费时间来关闭广告页面,非常的烦人。不过最近小编发现了关闭电脑广告弹窗的方法,我们一起来看一看吧!一、启用弹出窗口阻止程序这个阻止广告的功能在【控制面板】里就可以设置,广告基本上都会被阻止,一天下来也不会再出现广告弹窗。操作步骤:打开【控制面板】,点击【网络和Internet】,进去后再点击【Internet选项】,...

7-9 树种统计 (25 分)_Jackie·Tang的博客-程序员秘密

随着卫星成像技术的应用,自然资源研究机构可以识别每一棵树的种类。请编写程序帮助研究人员统计每种树的数量,计算每种树占总数的百分比。输入格式:输入首先给出正整数N(≤105),随后N行,每行给出卫星观测到的一棵树的种类名称。种类名称由不超过30个英文字母和空格组成(大小写不区分)。输出格式:按字典序递增输出各种树的种类名称及其所占总数的百分比,其间以空格分隔,保留小数点后4位。输入样例:...

多标签图像识别模型_AI视觉网奇的博客-程序员秘密

CVPR 2019 | 旷视研究院提出ML-GCN:基于图卷积网络的多标签图像识别模型原文:https://mp.weixin.qq.com/s?__biz=MzIwMTc4ODE0Mw==&mid=2247496371&idx=1&sn=13ee75573ac9b0b698ee27188cffc4d0&chksm=96ea2d33a19da4259...

推荐文章

热门文章

相关标签