07-网络 UDP-dgram

314 阅读1分钟

网络 UDP-dgram

dgram模块是对UDP socket的一层封装,相对net模块简单很多,

UDP 客户端 VS UDP 服务端

首先启动UDP server 监听来自端口33333的请求.

// server端
function server(params) {
  const PORT = 33333
  const HOST = '127.0.0.1'

  const server = dgram.createSocket('udp4')
  server.on('listening', () => {
    const address = server.address()
    console.log('UDP Server listening', address.address, address.port);
  })
  server.on('message', (message, remote) => {
    console.log(remote.address, remote.port, message);
  })
  server.bind(PORT, HOST)
  server1()
}
// client端
function server1(params) {
  const PORT = 33333
  const HOST = '127.0.0.1'
  const message = Buffer.from('MY Good')
  const client = dgram.createSocket('udp4')
  client.send(message, PORT, HOST, (err, bytes) => {
    if (err) return
    console.log('UDP message send to', HOST, PORT);
    client.close()
  })
}
server()

广播

// 创建客户端,向地址 "255.255.255.255:33333" 进行广播
function server1(params) {
  const client = dgram.createSocket("udp4");
  const msg = Buffer.from("hello world");
  const port = 33333;
  const host = "255.255.255.255";
  client.bind(() => {
    client.setBroadcast(true); // 设置或清除SO_BROADCAST套接字选项,该选项可帮助客户端将数据报发送到特定的广播地址。
    client.send(msg, port, host, (err) => {
      if (err) return;
      console.log("msg has been sent");
      client.close();
    });
  });
}
// 通过 dgram 时间广播功能很简单, 服务端代码如下
function server2(params) {
  const server = dgram.createSocket("udp4");
  const PORT = 33333;
  server.on("message", (message, info) => {
    console.log("server get message from", info.address, info.port);
  });
  server.bind(PORT);
  server1();
}
// server2()
// msg has been sent
// server get message from 10.54.46.16 64848