Will find a way

TCP 서버 간단하게 구현하기 본문

BackEnd/NodeJs

TCP 서버 간단하게 구현하기

Jaka_Park 2024. 6. 10. 23:28
// nodejs의 내장 모듈
// net 내장모듈을 제공

// TCP 소켓을 만들어서 사용
// TCP 연결을 맺는 프로토콜을 만들 수 있다.

//모듈 가져오기
const net = require("net");
const PORT = 8000;

// 서버 객체 생성
const server = net.createServer((client) => {
  // 클라이언트가 접속하면 보내는 데이터를 받기 위해서
  
  // "data" : 데이터를 전송하게되면 네트워크에 전송된 데이터
  // 바이너리 형식으로 전송이 된다. 클라이언트가 보낸 데이터는 Buffer("버퍼") 형태로 전송
  // 서버 측에서는 해석해서 문자열로 변환해서 사용한다.
  // 출력된 데이터는 인코딩을 해서 데이터를 표현 해주면 되는 것
  // 인코딩 utf-8
  client.setEncoding("utf8")
  
  client.on("data", (data) => {
    // 클라이언트에서 보낸 데이터
    // 네트워크를 통해 전송되는 데이터
    // 바이너리 형식으로 전송된다.
    
    console.log(data.toString());
    
    // 데이터를 조회 하겠다 조회 요청 한것.
        // HTTP의 버전은 1.0, 1.1, 2.0 있는데
        // 우리가 사용하는 버전은 1.1 버전이다.
        // 1.1 버전은 www에서 사용되는 기본 프로토콜
        // (1997년도 생성 아직까지 사용)

        // Connection : 클라이언트와 서버의 연결 상태의 속성을 정한다. 다음 요청을 보낼때까지 연결 유지

        // Content-type : 전송하는 데이터의 타입이 어떤거다 명시 text/html

        // GET / HTTP/1.1
        // Host: localhost:8000
        // Connection: keep-alive
        // Cache-Control: max-age=0
        // sec-ch-ua: "Google Chrome";v="125", "Chromium";v="125", "Not.A/Brand";v="24"
        // sec-ch-ua-mobile: ?0
        // sec-ch-ua-platform: "Windows"
        // Upgrade-Insecure-Requests: 1
        // User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36
        // Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
        // Sec-Fetch-Site: none
        // Sec-Fetch-Mode: navigate
        // Sec-Fetch-User: ?1
        // Sec-Fetch-Dest: document
        // Accept-Encoding: gzip, deflate, br, zstd
        // Accept-Language: ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7

        const body = `<html lang="en">
        <head>
            <meta charset="UTF-8">
            <meta name="viewport" content="width=device-width, initial-scale=1.0">
            <title>Document</title>
        </head>
        <body>
            <div>안녕하세요</div>
        </body>
        </html>`
        // body의 내용 본문의 내용
        const resMsg = `HTTP/1.1 200 ok
        Content-Type : text/html
        Content-Length : ${body.length}

        ${body}
        `
        client.write(resMsg);
        client.end();
  })
})

// 서버를 대기 상태로 만들기
server.listen(PORT, () => {
  console.log("server on")
})

'BackEnd > NodeJs' 카테고리의 다른 글

스트림(Stream) 사용 예제  (0) 2024.06.12
버퍼 (Buffer) / 스트림 (Stream)  (1) 2024.06.11
[NodeJs] 모듈, require, module.exports와 exports  (0) 2024.06.05
[NodeJs] REPL 모드  (0) 2024.06.04
NodeJs 첫 시작  (0) 2024.06.04