나만의 작은 도서관
[TIL] 240624 캠프 71일차: net으로 간단한 TCP 서버 만들기, 자바스크립트 Buffer 본문
오늘 배운 내용
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);
});
현재 서버 구조
자바스크립트 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% 완료
'Today I Learn' 카테고리의 다른 글
[TIL] 240626 캠프 73일차: 로드 밸런싱, 대칭/공개 키 암호화 방식 (0) | 2024.06.27 |
---|---|
[TIL] 240625 캠프 72일차: 커링 (Currying) , 프로토콜 버퍼 (0) | 2024.06.25 |
[TIL] 240621 캠프 68일차: 웹소켓과 http와의 관계, Socket.io의 기초 emit 이해 (0) | 2024.06.23 |
[TIL] 240620 캠프 67일차: HTML파일에서 script로 API 사용하기, 객체에서 속성의 값에 접근하는 2가지 방식: [ ] 와 . (0) | 2024.06.20 |
[TIL] 240619 캠프 66일차: docker 컨테이너 접속 명령어, JS reduce() (0) | 2024.06.19 |