nodejs的某些api~(四)udp&dns
今天记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的更多相关文章
- TFS API : 四、工作项查询
TFS API : 四.工作项查询 本节将讲述如何查询工作项,将用户统计数据. 使用WorkItemStore.Query方法进行查询工作项,其使用的语法和SQL语法类似: Select [标题] f ...
- Express4.x API (四):Router (译)
Express4.x API 译文 系列文章 Express4.x API (一):application (译) -- 进行 Express4.x API (二):request (译) -- 完成 ...
- vuejs目录结构启动项目安装nodejs命令,api配置信息思维导图版
vuejs目录结构启动项目安装nodejs命令,api配置信息思维导图版 vuejs技术交流QQ群:458915921 有兴趣的可以加入 vuejs 目录结构 build build.js check ...
- Nodejs课堂笔记-第四课 Dynamodb为何物
本文由Vikings(http://www.cnblogs.com/vikings-blog/) 原创,转载请标明.谢谢! 我喜欢带着目标来学习新知识.因此学习nodejs过程中,不喜欢只看枯燥的语法 ...
- 使用nodejs+ harbor rest api 进行容器镜像迁移
最近因为基础设施调整,需要进行harbor 镜像仓库的迁移,主要是旧版本很老了,不想使用,直接 打算部署新的,原以为直接使用复制功能就可以,但是发现版本差异太大,直接失败,本打算使用中间 版本过度进行 ...
- MEAN: AngularJS + NodeJS的REST API开发教程
Node.JS https://www.jdon.com/idea/nodejs/web-app-with-angularjs-and-rest-api-with-node.html Mean是一个热 ...
- 天气预报API(四):全国城市代码列表(“新编码”)
说明 天气预报API系列文章涉及到的天气网站10个左右,只发现了中国气象频道和腾讯天气城市代码参数特别: 暂且称 中国气象频道.腾讯天气使用的城市代码为 "新编码" 注:中国气象频 ...
- 从零开始,做一个NodeJS博客(四):服务器渲染页面与Pjax
标签: NodeJS 0 一个星期没更新了 = = 一直在忙着重构代码,以及解决重构后出现的各种bug 现在CSS也有一点了,是时候把遇到的各种坑盘点一下了 1 听歌排行 API 修复与重构 1.1 ...
- nodejs:express API之res.locals
在从零开始nodejs系列文章中,有一个login.html文件 再来看它的get方法,我们并没有看到mess字段.那mess到底是从哪里来的呢? 接着我看到app.js文件里面: 只有这里出现了me ...
随机推荐
- spark单击 搭建
http://files.cnblogs.com/files/yxnyd/spark.zip
- [转帖]2015年时微软Win3.1崩溃迫使巴黎奥利机场短暂关闭
https://www.ithome.com/html/it/188796.htm IT之家讯 2015年11月14日消息,上周法国巴黎奥利机场因为微软的Windows 3.1系统出现故障不得不迫使所 ...
- 对于tomcat通过catalina.sh停止服务后,tomcat进程没有退出问题解决办法
例:tomcat路径及名称为/data/apache-tomcat-7.0.67/ vim /data/apache-tomcat-7.0.67/bin/catalina.sh 找到org.apach ...
- Delphi窗体之间互相调用的简单问题
问题是这样的,我的程序主窗口Form1上面有一个数据连接(ADOCONNECTION1)和ADOQUERY,然后还有一些数据感知组件用于浏览用的,我打算点击From1中的一个“修改数据”按钮,就弹出F ...
- Java多线程之定时任务(Timer)
package org.study2.javabase.ThreadsDemo.schedule; import java.util.Date; import java.util.Timer; imp ...
- Lodop打印连续的纸张
连续的纸张,有时有会被误解为没有高度,高度自适应,其实不是,这属于纸张连续打印,纸张高度和实际单个纸张高度相同.纸张高度自适应适用于没有高度的那种小票打印(卷纸没有纸张分界线),不是这种连续纸张.关于 ...
- Linux常见操作
前面的话 本文将详细介绍Linux常见操作 基本概念 Linux严格区分大小写,所有内容以文件形式保存,包括硬件 Linux没有扩展名的概念,不靠扩展名来区分文件类型.但有一些约定俗成的扩展名 压缩包 ...
- 检索 COM 类工厂中 CLSID 为 {91493441-5A91-11CF-8700-00AA0060263B} 的组件失败
Symptoms When no user is interactively logged on to the server console, if you try to start a COM+ a ...
- codeforces158D
Ice Sculptures CodeForces - 158D The Berland University is preparing to celebrate the 256-th anniver ...
- int,String转换
int -> String 第一种方法:s=i+""; //会产生两个String对象 第二种方法:s=String.valueOf(i); //直接使用String类的静态 ...