今天记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. 深入解读Promise对象

    promise对象初印象: promise对象是异步编程的一种解决方案,传统的方法有回调函数和事件,promise对象是一个容器,保存着未来才会结束的事件的结果 promise对象有两个特点: 1.p ...

  2. mysql_linux(centos7 mysql 5.7.19)

    centos7  mysql 5.7.19安装 1.解压文件 [root@centos3 ~]# tar -zxvf mysql-5.7.19-linux-glibc2.12-x86_64.tar.g ...

  3. [转帖]中关村:LED屏幕和OLED屏幕有什么区别?答案在这里

    LED屏幕和OLED屏幕有什么区别?答案在这里   中关村在线 01-0810:40 目前的电视市场,更新换代的频率越来越快,无论是国产品牌还是合资品牌,都不约而同的推出了全新产品.这离不开人们对更好 ...

  4. HDU 2459 Maximum repetition substring

    题目:Maximum repetition substring 链接:http://acm.hdu.edu.cn/showproblem.php?pid=2459 题意:给你一个字符串,求连续重复出现 ...

  5. js 判断一个字符在字符串中出现的次数

    <script type="text/javascript"> var s='djh.doiwe.esd.d.ddd0sdd.d.'; var n=(s.split(' ...

  6. 校园电商项目3(基于SSM)——配置Maven

    步骤一:添加必要文件夹 先在src/main/resources下添加两个文件夹 接着在webapp文件夹下添加一个resources文件夹存放我们的静态网页内容 WEB-INF里的文件是不会被客户端 ...

  7. Percona-xtrabackup 使用详解与原理

    现在有个需求需要对使用 innodb 的数据库进行热备.网上查了很多工具皆推荐 Percona-xtrabackup 于是就仔细了解调研一番. 我们可以前往 https://www.percona.c ...

  8. Math java

    package cn.liuliu.com; import java.math.BigDecimal; import java.math.BigInteger; /* * 一.Math类? * * 1 ...

  9. JarvisOJ Basic 熟悉的声音

    两种元素,还有声音,想到了莫尔斯电码,解码得到 jbluwewnz 提交,发现不对,觉得应该是有实际意义的东西,实在想不到还能怎么解,就去看了题解. 发现这个还可以再套一个凯撒密码,就拿python写 ...

  10. python----函数的动态传参

    函数的动态传参 *args 将所有的实参的位置参数聚合到一个元组,并将这个元组赋值给args 有些时候,对于函数,传入的实参数量可能是不固定的,也就是动态的,这个时候我们就需要用到函数的动态传参.下面 ...