今天记udp/数据报套接字和dns。

udp

UDP/数据报套接字 => require('dgram');
dgram.createServer([type],[cb]);
type:可以是'udp4','udp6';
cb:message事件监听器;
返回Socket对象
如果您想接收数据报则可调用 socket.bind。socket.bind() 会绑定到“所有网络接口”地址的一个随机端口(udp4 和 udp6 皆是如此)
然后您可以通过 socket.address().address 和 socket.address().port 来取得地址和端口。
类dgram.Socket //封装了数据报功能,可通过createSocket创建
//事件message msg Buffer对象,消息; rinfo OBJ远程地址信息;

socket.on('message',function(msg,rinfo){
console.log('收到%d字节,来自%s:%d\n',msg.length,rinfo.address,rinfo.port);
})

//事件listening 套接字开始监听数据报时产生,会在udp套接字被创建时发生
//事件close ,error
socket.send(buf,offset,length,port,address,[cb])
buf Buffer 对象,要发送的消息
offset Integer,Buffer 中消息起始偏移值。
length Integer,消息的字节数。
port Integer,目标端口
address String,目标 IP
callback Function,可选,当消息被投递后的回调
//对于udp套接字,必须制定模板端口和ip,address参数可是一个字符串,他会被dns解析;
socket.bind(port,[address],[cb]);
port Integer;address String 可选
对于udp套接字,在一个具名端口port和可选地址address上监听数据。
socket.close();
socket.address();
socket.setBroadcast(flag);设置或清除SO_BROADCAST套接字选项。当该选项被设置,则udp报文可能被发送到一个本地接口的广播地址;
socket.setTTL(ttl);设置IP_TTL套接字选项;参数介于1-255的跃点数。大多数系统缺省为64;
socket.setMulticastTTL(ttl)设置IP_MULTICAST_TTL套接字选项。
socket.unref()。。。
socket.ref()

来个udp客户端的例子,udp不是node的流,只eventEmitter的实例,通过bind监听端口,udp虽然连接多,安全性低,但它不通过tcp三次握手,速度快,一个套接字可以连多个客户端,下面介绍的dns服务器就是udp的应用。

message回调里面一个是message,另一个rinfo是客户端的地址。

var dgram=require("dgram");
var server=dgram.createSocket("udp4");
server.on("message",function(msg,rinfo){
console.log("server got:"+msg+"from"+rinfo.address+":"+rinfo.port);
})
server.on("listening",function(){
var address=server.address();
console.log("server listening "+address.address+":"+address.port);
})
server.bind(41234);

下面是客户端:

var dgram=require("dgram");
var message=new Buffer("sting 哈哈");
var client=dgram.createSocket("udp4");
client.send(message,0,message.length,41234,"localhost",function(err,bytes){
client.close();
})

udp传输的是一个buffer对象,send的参数是message,offset偏移量,数据长度,连接端口和host,还有回调。

复制代码自行检测。
DNS
dns.lookup(domain, [family], callback);//将一个域名解析为第一个找到的A记录(ipv4)或AAAA记录(ipv6)
//地址族family可以是4,6.缺省为null。 回调参数为cb(err,address,family)
dns.resolve(domain,[rrtype],cb)//将一个域名解析为一个rrtype指定记录类型的数组。有效rrytype取值有A,AAAA,MX,TX,SRV,PTR,NS,CNAME
//回调参数为(err,addresses)其中addresses中每一项的类型取决于记录类型;
dns.resolve4/6(domain,cb) //只用于查询IPv4记录;addresses是一个ipv4地址的数组;
dns.resolveMx(domain,cb);类似于resolve但用于邮件交换查询(MX记录)
dns.reloveTxt/Srv/Cname/Ns(domain,cb);
dns.reverse(ip,cb);反响解析IP地址,返回指向该ip地址的域名数组;cb(err,domains)
dns.getServers();已字符串返回一个当前用于解析的ip地址的数组;
dns.setServers(servers)指定一个ip地址字符串数组,将它们作为解析所用的服务器

nodejs的某些api~(四)udp&dns的更多相关文章

  1. TFS API : 四、工作项查询

    TFS API : 四.工作项查询 本节将讲述如何查询工作项,将用户统计数据. 使用WorkItemStore.Query方法进行查询工作项,其使用的语法和SQL语法类似: Select [标题] f ...

  2. Express4.x API (四):Router (译)

    Express4.x API 译文 系列文章 Express4.x API (一):application (译) -- 进行 Express4.x API (二):request (译) -- 完成 ...

  3. vuejs目录结构启动项目安装nodejs命令,api配置信息思维导图版

    vuejs目录结构启动项目安装nodejs命令,api配置信息思维导图版 vuejs技术交流QQ群:458915921 有兴趣的可以加入 vuejs 目录结构 build build.js check ...

  4. Nodejs课堂笔记-第四课 Dynamodb为何物

    本文由Vikings(http://www.cnblogs.com/vikings-blog/) 原创,转载请标明.谢谢! 我喜欢带着目标来学习新知识.因此学习nodejs过程中,不喜欢只看枯燥的语法 ...

  5. 使用nodejs+ harbor rest api 进行容器镜像迁移

    最近因为基础设施调整,需要进行harbor 镜像仓库的迁移,主要是旧版本很老了,不想使用,直接 打算部署新的,原以为直接使用复制功能就可以,但是发现版本差异太大,直接失败,本打算使用中间 版本过度进行 ...

  6. MEAN: AngularJS + NodeJS的REST API开发教程

    Node.JS https://www.jdon.com/idea/nodejs/web-app-with-angularjs-and-rest-api-with-node.html Mean是一个热 ...

  7. 天气预报API(四):全国城市代码列表(“新编码”)

    说明 天气预报API系列文章涉及到的天气网站10个左右,只发现了中国气象频道和腾讯天气城市代码参数特别: 暂且称 中国气象频道.腾讯天气使用的城市代码为 "新编码" 注:中国气象频 ...

  8. 从零开始,做一个NodeJS博客(四):服务器渲染页面与Pjax

    标签: NodeJS 0 一个星期没更新了 = = 一直在忙着重构代码,以及解决重构后出现的各种bug 现在CSS也有一点了,是时候把遇到的各种坑盘点一下了 1 听歌排行 API 修复与重构 1.1 ...

  9. nodejs:express API之res.locals

    在从零开始nodejs系列文章中,有一个login.html文件 再来看它的get方法,我们并没有看到mess字段.那mess到底是从哪里来的呢? 接着我看到app.js文件里面: 只有这里出现了me ...

随机推荐

  1. CPU Cache 机制以及 Cache miss

    CPU体系结构之cache小结 1.What is cache? Cache是用来对内存数据的缓存. CPU要访问的数据在Cache中有缓存,称为“命中” (Hit),反之则称为“缺失” (Miss) ...

  2. easyUI定区关联快递员js代码

    easyUI定区关联快递员js代码: <script type="text/javascript"> $.fn.serializeJson=function(){ va ...

  3. mongodb的安装方法

    下载安装 mongodb官网下载地址:https://www.mongodb.org/downloads#produc...直接下载.msi文件并安装到指定目录即可.我的安装路径是D:\mongodb ...

  4. springCloud com.sun.jersey.api.client.ClientHandlerException: java.net.ConnectException: Connection refused: connect

    1.com.sun.jersey.api.client.ClientHandlerException: java.net.ConnectException: Connection refused: c ...

  5. linux audit审计(8)--ausearch搜索audit日志文件

    ausearch这个工具,可以针对指定的事件来搜索audit日志文件.默认情况下,ausearch搜索/var/log/audit/audit.log这个文件. The ausearch utilit ...

  6. spring 给一个类 生成test

    右击一个类,然后:GoTo==>test ,就可以新建这个类的测试用例了,简单粗暴, 如果想要不污染数据库,就在一个测试用例 的标签@Test 下面在加上@RollBack 这样: @Test ...

  7. 如何抓取电商的数据 & Python

    如何抓取电商的数据 & Python https://www.zhihu.com/question/40720286 https://www.zhihu.com/question/382455 ...

  8. 老男孩python学习自修第五天【集合】

    特点: (1)无序 (2)不重复 使用场景: (1)关系测试 (2)去重 x & y 求交集 x | y 求并集 x - y 求差集 x ^ y 求对称差集 x.intersection(y) ...

  9. WebStorm开发React项目,修代码之后运行的项目不更新

    昨天遇到一个恶心的问题,我新建了一个React.js项目,想做一点关于Pc端的开发,习惯性的用了WebStorm,可是发现一个问题,就是代码修改之后,浏览器上根本不会刷新.然后,我把方向定位在没有正确 ...

  10. 【python练习题】程序1

    #题目:有1.2.3.4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? count = 0 for i in range(1,5): for j in range(1,5): for k ...