공부/TIL

[Node.js] Socket.io를 이용한 TCP/IP chat program 구현

2023. 7. 15. 04:03

저번 포스팅에 이어 Socket.io를 이용해 간단한 TCP chat program을 구현해보겠다.

 

우선 socket.io를 설치한다.

npm i socket.io
// 클라이언트용
npm i socket.io-client

 

나는 클라이언트쪽도 구현해야 하기 때문에 socket.io-client도 설치했다.

파일 구조는 저번 포스팅과 동일하다.

 

server.js의 코드는 다음과 같다 :

const server = require('http').createServer()
const io = require('socket.io')(server)

io.on('connection', client => {
    console.log('클라이언트와 연결되었습니다.')

    // 클라이언트로부터 데이터를 받았을 때 처리하는 부분
    client.on('event', data => { 
        console.log('클라이언트로부터 메세지를 수신했습니다: ', data.toString().trim())
    })

    // 클라이언트와 연결이 끊겼을 때 처리하는 부분
    client.on('disconnect', () => {
        console.log('클라이언트와의 통신이 종료되었습니다')
    })

    // 클라이언트와의 연결에서 발생한 에러를 처리하는 부분
    client.on('error', error => {
        console.error('클라이언트 에러가 발생했습니다: ', error)
    })
})

// 서버에서 발견한 에러를 처리하는 부분
io.on('error', error => {
    console.error('서버에서 에러가 발생했습니다: ', error)
})

// 서버를 특정 포트에서 대기 시킴
server.listen(3000)

코드를 작성하다 보니, 클라이언트와 서버에서 발생한 에러는 각각 처리해주어야 한다는 깨달음을 얻었다. 오랜만에 백엔드를 공부해보니 까먹은 게 한두개가 아니다...

 

client.js의 코드는 다음과 같다 :

const io = require('socket.io-client')
const readline = require('readline')

const socket = io('http://localhost:3000')

socket.on('connect', () => {
  console.log('서버에 연결되었습니다.')

  // 사용자 입력을 받기 위한 인터페이스 설정
  const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
  })

  // 사용자 입력을 받아서 서버로 전송
  rl.on('line', input => {
    try {
        socket.emit('event', input)
    } catch (error) {
        console.log('클라이언트 에러가 발생했습니다: ', error)
    }
  })

  // 서버로부터 데이터 수신 시 처리하는 부분
  socket.on('event', data => {
    console.log('서버로부터 메시지를 받았습니다:', data.toString().trim())
  })

  // 서버와의 연결이 끊겼을 때 처리하는 부분
  socket.on('disconnect', () => {
    console.log('서버와의 연결이 종료되었습니다.')
    rl.close() // 사용자 입력 인터페이스를 닫음
  })

  // 서버와의 연결에서 발생한 에러를 처리하는 부분
  socket.on('error', error => {
    console.error('서버에서 에러가 발생했습니다:', error)
  })
})

클라이언트 자체적으로 발생한 에러 처리는 try-catch를 이용한다.

 

결과물

 

참고
https://www.npmjs.com/package/socket.io
그리고 chatgpt

 

'공부 > TIL' 카테고리의 다른 글

[혼자 공부하는 컴퓨터구조+운영체제] Chapter 1 - 3  (1) 2023.07.29
[Nods.js] dgram을 이용한 UDP 채팅 서버 구현  (0) 2023.07.15
[Node.js] net을 이용하여 간단한 TCP/IP chat program 만들기  (0) 2023.07.15
[모두의 네트워크] 9장 (무선 랜 이해하기)  (0) 2023.07.06
[Tistory 스킨 편집] hELLO 스킨 적용 시 첫번째 카테고리들만 펼치기  (0) 2023.07.05
'공부/TIL' 카테고리의 다른 글
  • [혼자 공부하는 컴퓨터구조+운영체제] Chapter 1 - 3
  • [Nods.js] dgram을 이용한 UDP 채팅 서버 구현
  • [Node.js] net을 이용하여 간단한 TCP/IP chat program 만들기
  • [모두의 네트워크] 9장 (무선 랜 이해하기)
Ail_
Ail_
Ail_
log
Ail_
  • 분류 전체보기 (182)
    • 사설 (11)
      • 강연 (5)
      • * (3)
      • 회고 (3)
    • 공부 (161)
      • Just do it (3)
      • TIL (66)
      • Game Bootcamp (31)
      • Digital Twin Bootcamp (39)
    • 노션 (3)
    • 프로젝트 (23)
      • Game Bootcamp (1)
      • Digital Twin Bootcamp (21)
      • 경기청년 갭이어 (1)

인기 글

최근 글

태그

  • 대시
  • 피격
  • 공격
  • TypeScript
  • 한입 크기로 잘라 먹는 타입스크립트
  • 회고
  • 부트캠프
  • 유니티 게임 개발
  • SQL첫걸음
  • 개발일지
  • 노션
  • SQL 첫걸음
  • 티스토리챌린지
  • 멋쟁이사자처럼
  • 이펙트
  • mysql 설치
  • 플레이어
  • unity
  • Chat
  • 템플릿
  • node.js
  • 데이터베이스
  • C#
  • 인터랙티브 웹 UX·UI
  • notion
  • 배포
  • 개발회고
  • Do it! 자료구조와 함께 배우는 알고리즘 입문 : 파이썬 편
  • 오블완
  • 유니티

최근 댓글

전체
오늘
어제
hELLO · Designed By 정상우.
Ail_
[Node.js] Socket.io를 이용한 TCP/IP chat program 구현
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.