나만의 작은 도서관

[TIL] 240624 캠프 71일차: net으로 간단한 TCP 서버 만들기, 자바스크립트 Buffer 본문

Today I Learn

[TIL] 240624 캠프 71일차: net으로 간단한 TCP 서버 만들기, 자바스크립트 Buffer

pledge24 2024. 6. 24. 23:24

오늘 배운 내용                                     

net으로 간단한 TCP 서버 만들기

Node.js에서는 기본적으로 TCP 서버 구축을 위해 net을 제공한다. 그렇기 때문에 Node.js에 설치되어 있다면 추가 설치 없이 net을 사용할 수 있다. net은 net.createServer()를 통해 TCP서버를 만드며, 아래와 같이 사용한다.

 

server.js

import net from 'net';

const PORT = 5555;

// net을 이용해 TCP서버를 만들고, socket이 연결 요청을 했을 때 해당 socket에 대한
// 이벤트 3개(data, end, error)를 서버 측에 추가한다.
const server = net.createServer((socket) => {
  console.log(`Client connected from: ${socket.remoteAddress}:${socket.remotePort}`);
  socket.on('data' , (data) => {
    console.log(data);
  })
  
  socket.on('end', () => {
    console.log('Client disconnected');
  });

  socket.on('error', (err) => {
    console.error('Socket error:', err);
  });
})

// 5555번으로 listen 포트를 연다.
server.listen(PORT, () => {
  console.log(`Echo server listening on port ${PORT}`);
  console.log(server.address());
})

 

client.js

import net from 'net';

// 서버에 연결할 호스트와 포트
const HOST = 'localhost';
const PORT = 5555;

// 클라이언트 측 소켓을 생성.
const client = new net.Socket();

// 클라이언트 소켓이 서버에 연결 시도.
// 연결 성공 시, "Connected to server"가 출력.
client.connect(PORT, HOST, () => {
  console.log('Connected to server');
})

// 데이터 수신 시, 해당 데이터 출력하는 이벤트 추가.
client.on('data', (data) => {
  console.log(data)
});

// 서버가 닫히는 이벤트 수신 시, 'Connection closed' 출력
client.on('close', () => {
  console.log('Connection closed');
});

// 에러가 발생한 경우, 해당 에러를 출력.
client.on('error', (err) => {
  console.error('Client error:', err);
});

 

현재 서버 구조

일반적으로는 하나의 선으로 표현하지만, 이해를 위해 2개의 선으로 표현했다

자바스크립트 Buffer

Buffer 객체는 Node.js에서 이진 데이터를 다루기 위한 특별한 객체이다. Buffer는 바이터 단위로 접근하고 조작한다. 사용하는 법은 다음과 같다.

// ----------------- 클라이언트(client.js) --------------------------
// 클라이언트 소켓이 서버에 접속 성공 시,
// "Hello"라는 문자열을 바이트 배열로 저장하여 서버 측에 전송한다. 
client.connect(PORT, HOST, () => {
  console.log('Connected to server');

  const message = 'Hello'; 
  const buffer = Buffer.from(message);
  client.write(buffer); // 웹소켓에서의 socket.emit('data', "Hello")와 유사한 역할 수행
});


// ----------------- 서버(server.js) --------------------------
.
.
.
socket.on('data' , (data) => {
    console.log(data);  // <Buffer 48 65 6c 6c 6f>
})

 

 

오늘 한 일                                       

더보기
  • Node.js TCP서버 강의 진도 60% 완료