dgram 数据报

    Event: ‘message’
    function (msg, rinfo) { }
    Emitted when a new datagram is available on a socket. msg is a Buffer and rinfo is an object with the sender’s address
    information and the number of bytes in the datagram.

    当一个SOCKET 接收到一个新的数据包的时候触发此事件, msg 是缓冲区变量,rinfo 是一个包含了发送者地址
    信息以及数据报字节长度的对象.

    Event: ‘listening’

    当一个SOCKET 开始监听数据报的时候触发,当UDP SOCKET 建立后就会触发这个事件。而UNIX DOMAIN
    SOCKET 直到在SOCKET 上调用了bind()方法才会触发这个消息.

    Event: ‘close’

    当一个SOCKET 使用close()方法关闭时触发此事件.在此事件之后此SOCKET 不会有任何消息事件被触发.

    dgram.createSocket(type, [callback])

    建立一个指定类型的数据报SOCKET,有效类型有:udp4,udp6,unix_dgram
    callback 作为一个可选项,可作为message 事件的监听器被加入。

    dgram.send(buf, offset, length, path, [callback])

    下面是一个通过unix domain socket /var/run/syslog 发送消息到syslogd 的例子:

    从MESSAGE 中偏移为0的地方开始,长度为MESSAGE.LENGTH 的这些内容通过/var/run/syslog 发送系统调
    用发送后,将调用CALLBACK,如果有错误则抛出异常,否则console.log 实际发送了多少个字节。

    dgram.send(buf, offset, length, port, address, [callback])

    对于UDPSOCKETS 来说,目标端口和IP 地址是必须要指定的,可以用字符串来指定地址参数,并且这个参数
    是可以通过DNS 解析的,CALLBACK 作为可选项可以检测到任何DNS 错误和是否BUF 重复使用了.请记住
    DNS 搜索将会使SEND 动作最少延迟到下一个执行时间片发生, ,唯一能确定已经SEND 得方法是使用
    CALLBACK

    下面是一个发送UDP 数据包到本机一个随机端口的例子

    1. var dgram = require('dgram'),
    2. message = new Buffer("Some bytes");
    3. client = dgram.createSocket("udp4");
    4. client.send(message, 0, message.length, 41234, "localhost");

    dgram.bind(path)

    只有在Unxi DOMAIN DATAGRAM SOCKET 中使用,开始在一个指定路径上监听一个SOCKET 过来的的数据
    报。要记得,客户端可以不是用BIND()方法而直接调用SEND()方法,但是不使用BIND()方法是无法接收到任
    何信息的。

    下面是一个使用UNIX DOMAIN 数据包服务器来做接受信息回显的例子:

    下面是一个UNIX DOMAIN DATAGRAM 客户端与服务器交互的例子

    1. var serverPath = "/tmp/dgram_server_sock";
    2. var clientPath = "/tmp/dgram_client_sock";
    3. var message = new Buffer("A message at " + (new Date()));
    4. var client = dgram.createSocket("unix_dgram");
    5. });
    6. client.on("listening", function () {
    7. console.log("client listening " + client.address().address);
    8. client.send(message, 0, message.length, serverPath);

    对于UDP SOCKETS,这个方法会在指定端口和可选地址上监听,如果地址没有指定,则系统会尝试监听所有
    有效地址。

    下面是一个监听在41234端口的UDP 服务器的例子

    dgram.close()

    这个方法关闭非延迟的SOCKET 并且停止在其上监听数据。即使没有调用BIND()方法UDP SOCKET 也会自动
    监听消息。

    dgram.address()

    返回包含SOCKET 地址信息的一个对象,对于UDP SOCKETS 来说,这个对象将包含地址和端口,对于UNIX
    DOMAIN SOCKETS 来说,这个对象仅包含地址。

    dgram.setBroadcast(flag)

    设置或者清除SO_BROADCAST 选项,当这个选项设置后,UDP 包可以发送到本地接口的广播地址。

    dgram.setTTL(ttl)