Skip to content

net

net เป็นโมดูลในตัวของ Node.js ที่ให้ความสามารถในการสร้าง TCP server และ client สำหรับการสื่อสารแบบ connection-oriented

import { createServer, createConnection, connect } from 'node:net';

APIคำอธิบายลักษณะคำอธิบายเพิ่มเติม
createServerสร้าง TCP serverAsynchronousใช้รับการเชื่อมต่อจาก clients
createConnectionสร้าง TCP client connectionAsynchronousสำหรับเชื่อมต่อไปยัง TCP server
connectสร้าง TCP client connectionAsynchronousalias ของ createConnection
SocketClass สำหรับ TCP socketAsynchronousใช้จัดการการเชื่อมต่อและการรับส่งข้อมูล
ServerClass สำหรับ TCP serverAsynchronousใช้จัดการการเชื่อมต่อจาก clients

ตัวอย่าง

สร้าง TCP Server พื้นฐาน

js
import { createServer } from "net";

// สร้าง TCP server
const server = createServer((socket) => {
  console.log("Client connected");

  // รับข้อมูลจาก client
  socket.on("data", (data) => {
    console.log(`Received: ${data}`);

    // ส่งข้อมูลกลับ
    socket.write(`Echo: ${data}`);
  });

  // เมื่อ client ปิดการเชื่อมต่อ
  socket.on("end", () => {
    console.log("Client disconnected");
  });
});

// เริ่มฟังที่ port 3000
server.listen(3000, () => {
  console.log("TCP Server listening on port 3000");
});

สร้าง TCP Client

js
import { connect } from "net";

// เชื่อมต่อไปยัง TCP server
const client = connect({ port: 3000 }, () => {
  console.log("Connected to server");

  // ส่งข้อมูลไปยัง server
  client.write("Hello TCP Server!");
});

// รับข้อมูลจาก server
client.on("data", (data) => {
  console.log(`Server says: ${data}`);

  // ปิดการเชื่อมต่อ
  client.end();
});

client.on("end", () => {
  console.log("Disconnected from server");
});

ใช้ Socket สำหรับการสื่อสาร

js
import { Socket } from "net";

// สร้าง socket ใหม่
const socket = new Socket();

// เชื่อมต่อไปยัง server
socket.connect(3000, "localhost", () => {
  console.log("Connected");

  // ส่งข้อมูลหลายครั้ง
  socket.write("First message");
  socket.write("Second message");
});

// รับข้อมูล
socket.on("data", (data) => {
  console.log("Received:", data.toString());
});

// จัดการ error
socket.on("error", (err) => {
  console.error("Socket Error:", err);
});

ตรวจสอบ Port ที่ใช้งานได้

js
import { createServer } from "net";

function checkPort(port) {
  return new Promise((resolve) => {
    const server = createServer()
      .listen(port)
      .on("listening", () => {
        server.close();
        resolve(true); // พอร์ตว่าง
      })
      .on("error", (err) => {
        resolve(false); // พอร์ตถูกใช้งาน
      });
  });
}

// ตัวอย่างการใช้งาน
async function findAvailablePort(startPort, endPort) {
  for (let port = startPort; port <= endPort; port++) {
    if (await checkPort(port)) {
      return port;
    }
  }
  throw new Error("No available ports found");
}

findAvailablePort(3000, 4000)
  .then(port => console.log("Available port:", port))
  .catch(err => console.error(err));

ตั้งค่า Keep-Alive

js
import { connect } from "net";

const client = connect({
  port: 3000,
  host: "localhost",
  keepAlive: true,
  keepAliveInitialDelay: 10000, // 10 วินาที
});

client.on("connect", () => {
  console.log("Connected with keep-alive");
});