Skip to content

dgram

dgram เป็นโมดูลในตัวของ Node.js ที่ให้ความสามารถในการสร้าง UDP/Datagram sockets สำหรับการสื่อสารแบบไม่มีการเชื่อมต่อ (connectionless)

Import

js
import { createSocket } from "node:dgram";

API

APIคำอธิบายลักษณะคำอธิบายเพิ่มเติม
createSocketสร้าง UDP socketAsynchronousใช้สำหรับส่งและรับ UDP datagrams รองรับทั้ง IPv4 และ IPv6
socket.sendส่ง UDP datagramAsynchronousสามารถระบุ port และ address ปลายทางได้
socket.bindผูก socket กับ port และ addressAsynchronousจำเป็นต้อง bind ก่อนรับข้อมูล
socket.closeปิด socketAsynchronousหยุดรับข้อมูลและปล่อยทรัพยากร

ตัวอย่าง

สร้าง UDP Server และ Client

Server

js
// server.js
import dgram from "dgram";

// สร้าง UDP server
const server = dgram.createSocket("udp4");

server.on("error", (err) => {
  console.error(`Server error:\n${err.stack}`);
  server.close();
});

server.on("message", (msg, rinfo) => {
  console.log(`Server got: ${msg} from ${rinfo.address}:${rinfo.port}`);
});

server.on("listening", () => {
  const address = server.address();
  console.log(`Server listening ${address.address}:${address.port}`);
});

// ผูก socket กับ port 41234
server.bind(41234);

Client

js
// client.js
import { Buffer } from "buffer";
import dgram from "dgram";

// สร้าง UDP client
const client = dgram.createSocket("udp4");

const message = Buffer.from("Hello UDP Server");

// ส่งข้อความไปยัง server ที่ localhost port 41234
client.send(message, 41234, "localhost", (err) => {
  if (err) {
    console.error("ส่งข้อมูลไม่สำเร็จ:", err);
  }
  client.close();
});

รับข้อมูลแบบ Multicast

js
import dgram from "dgram";

const socket = dgram.createSocket("udp4");

socket.on("listening", () => {
  const address = socket.address();
  console.log(`Listening on ${address.address}:${address.port}`);

  // เข้าร่วม multicast group
  socket.addMembership("224.0.0.114");
});

socket.on("message", (message, remote) => {
  console.log(
    `Received multicast message from ${remote.address}:${remote.port} - ${message}`,
  );
});

socket.bind(41234);

ตั้งค่า Socket Options

js
import dgram from "dgram";

const socket = dgram.createSocket({
  type: "udp4",
  reuseAddr: true, // อนุญาตให้ reuse address ได้
  recvBufferSize: 1024 * 1024, // ตั้งค่า buffer size เป็น 1MB
});

socket.on("message", (msg) => {
  console.log("Received:", msg.toString());
});

socket.bind(41234);

ตรวจสอบข้อมูล Address

js
import dgram from "dgram";

const socket = dgram.createSocket("udp4");

socket.bind(41234, () => {
  const address = socket.address();
  console.log("Socket info:", {
    address: address.address,
    port: address.port,
    family: address.family,
  });
});