UDP 数据报套接字.doc_第1页
UDP 数据报套接字.doc_第2页
UDP 数据报套接字.doc_第3页
UDP 数据报套接字.doc_第4页
UDP 数据报套接字.doc_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

文档首页 英文版文档本作品采用知识共享署名-非商业性使用 3.0 未本地化版本许可协议进行许可。Node.js v4.2.4 手册 & 文档索引|在单一页面中浏览|JSON格式目录 UDP / 数据报套接字o dgram.createSocket(type, callback)o 类: dgram.Socket 事件: message 事件: listening 事件: close 事件: error socket.send(buf, offset, length, port, address, callback) socket.bind(port, address, callback) socket.close() socket.address() socket.setBroadcast(flag) socket.setTTL(ttl) socket.setMulticastTTL(ttl) socket.setMulticastLoopback(flag) socket.addMembership(multicastAddress, multicastInterface) socket.dropMembership(multicastAddress, multicastInterface) socket.unref() socket.ref()UDP / 数据报套接字#稳定度: 3 - 稳定数据报套接字通过require(dgram)提供。重要提醒:dgram.Socket#bind()的行为在 v0.10 中已改变,并且现在它总是异步的。如果您的代码看起来像这样:var s = dgram.createSocket(udp4);s.bind(1234);s.addMembership(224.0.0.114);您需要将它改成这样:var s = dgram.createSocket(udp4);s.bind(1234, function() s.addMembership(224.0.0.114););dgram.createSocket(type, callback)# typeString 可以是 udp4 或 udp6 callbackFunction 可选,会被作为message事件的监听器。 返回:Socket 对象创建一个指定类型的数据报 Socket。有效类型包括udp4和udp6。接受一个可选的回调,会被添加为message事件的监听器。如果您想接收数据报则可调用socket.bind。socket.bind()会绑定到“所有网络接口”地址的一个随机端口(udp4和udp6皆是如此)。然后您可以通过socket.address().address和socket.address().port来取得地址和端口。类: dgram.Socket#dgram Socket 类封装了数据报功能,可以通过dgram.createSocket(type, callback)创建。事件: message# msgBuffer 对象,消息 rinfoObject,远程地址信息当套接字中有新的数据报时发生。msg是一个Buffer,rinfo是一个包含了发送者地址信息的对象:socket.on(message, function(msg, rinfo) console.log(收到 %d 字节,来自 %s:%dn, msg.length, rinfo.address, rinfo.port););事件: listening#当一个套接字开始监听数据报时产生。它会在 UDP 套接字被创建时发生。事件: close#当一个套接字被close()关闭时产生。之后这个套接字上不会再有message事件发生。事件: error# exceptionError 对象当发生错误时产生。socket.send(buf, offset, length, port, address, callback)# bufBuffer 对象,要发送的消息 offsetInteger,Buffer 中消息起始偏移值。 lengthInteger,消息的字节数。 portInteger,目标端口 addressString,目标 IP callbackFunction,可选,当消息被投递后的回调。对于 UDP 套接字,必须指定目标端口和 IP 地址。address参数可以是一个字符串,它会被 DNS 解析。可选地可以指定一个回调以用于发现任何 DNS 错误或当buf可被重用。请注意 DNS 查询会将发送的时间推迟到至少下一个事件循环。确认发送完毕的唯一已知方法是使用回调。如果套接字之前并未被调用bind绑定,则它会被分配一个随机端口并绑定到“所有网络接口”地址(udp4套接字是 0.0.0.0;udp6套接字是 :0)。向localhost随机端口发送 UDP 报文的例子:var dgram = require(dgram);var message = new Buffer(Some bytes);var client = dgram.createSocket(udp4);client.send(message, 0, message.length, 41234, localhost, function(err) client.close(););关于 UDP 数据报大小的注意事项一个IPv4/v6数据报的最大大小取决与MTU(最大传输单位)和Payload Length字段大小。 Payload Length字段宽16 bits,意味着正常负载包括网络头和数据不能大于 64K(65,507 字节 = 65,535 8 字节 UDP 头 20 字节 IP 头);这对环回接口通常是真的,但如此大的数据报对大多数主机和网络来说是不切实际的。 MTU是一个给定的数据链路层技术能为数据报提供支持的最大大小。对于任何连接,IPv4允许最小68字节的MTU,而 IPv4 所推荐的MTU为576(通常作为拨号类应用的推荐MTU),无论它们是完整接收还是分片。对于IPv6,最小的MTU为1280字节,但所允许的最小碎片重组缓冲大小为1500字节。68的值是非常小的,因为现在大多数数据链路层技术有都具有1500的最小MTU(比如以太网)。请注意我们不可能提前得知一个报文可能经过的每一个连接 MTU,因此通常情况下不能发送一个大于(接收者的)MTU的数据报(报文会被悄悄地丢掉,而不会将数据没有到达它意图的接收者的消息告知来源)。socket.bind(port, address, callback)# portInteger addressString,可选 callback没有参数的 Function,可选,当绑定完成时被调用。对于 UDP 套接字,在一个具名端口port和可选的地址address上监听数据报。如果address未指定,则操作系统会尝试监听所有地址。当绑定完成后,一个 listening 事件会发生,并且回调callback(如果指定)会被调用。同时指定 listening 事件监听器和callback并不会产生副作用,但也没什么用。一个绑定了的数据报套接字会保持 node 进程运行来接收数据报。如果绑定失败,则一个 error 事件会被产生。在极少情况下(比如绑定一个已关闭的套接字),该方法会抛出一个Error。一个监听端口 41234 的 UDP 服务器的例子:server.bind(41234);/ 服务器正在监听 0.0.0.0:41234socket.close()#关闭底层套接字并停止监听数据。socket.address()#返回一个包含了套接字地址信息的对象。对于 UDP 套接字,该对象会包含地址address、地址族family和端口号port。socket.setBroadcast(flag)# flagBoolean设置或清除SO_BROADCAST套接字选项。当该选项被设置,则 UDP 报文可能被发送到一个本地接口的广播地址。socket.setTTL(ttl)# ttlInteger设置IP_TTL套接字选项。TTL 表示“Time to Live”(生存时间),但在此上下文中它指的是报文允许通过的 IP 跃点数。各个转发报文的路由器或网关都会递减 TTL。如果 TTL 被一个路由器递减到 0,则它将不会被转发。改变 TTL 值通常被用于网络探测器或多播。setTTL()的参数为介于 1 至 255 的跃点数。在大多数系统上缺省值为 64。socket.setMulticastTTL(ttl)# ttlInteger设置IP_MULTICAST_TTL套接字选项。TTL 表示“Time to Live”(生存时间),但在此上下文中它指的是报文允许通过的 IP 跃点数,特别是组播流量。各个转发报文的路由器或网关都会递减 TTL。如果 TTL 被一个路由器递减到 0,则它将不会被转发。setMulticastTTL()的参数为介于 1 至 255 的跃点数。在大多数系统上缺省值为 1。socket.setMulticastLoopback(flag)# flagBoolean设置或清除IP_MULTICAST_LOOP套接字选项。当该选项被设置时,组播报文也会被本地接口收到。socket.addMembership(multicastAddress, multicastInterface)# multicastAddressString multicastInterfaceString,可选以IP_ADD_MEMBERSHIP套接字选项告诉内核加入一个组播分组。如果未指定multicastInterface,则操作系统会尝试向所有有效接口添加关系。socket.dropMembership(multicastAddress, multicastInterface)# multicastAddressString multicastInterfaceString,可选与addMembership相反,以IP_DROP_MEMBERSHIP套接字选项告诉内核退出一个组播分组。当套接字被关闭或进程结束时内核会自动调用,因此大多数应用都没必要调用它。如果未指定multicastInterface,则操作系统会尝试向所有有效接口移除关系。socket.unref()#如果这是事件系统中唯一一个活动的套接字,调用unref将允许程序退出。如果套接字已被unref,则再次调用unref并不会产生影响。socket.ref()#与unre

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论