멀티스레드 채팅 서버

2024. 10. 13. 20:45· 학교 수업/컴퓨터네트워크
목차
  1. C# 소켓 API의 구성
  2. Sockets의 내용을 3가지 클래스로 재분배
  3. C# 소켓 통신 흐름
  4. Windows 소켓 서버의 제작
  5. TCP 채팅 서버의 구성 (C#)
  6. TCP 서버의 구성 (C#)
  7. 사용자 관리
  8. Socket.Poll()
  9. Socket.Available()
  10. Hash Table (해시 테이블)

C# 소켓 API의 구성

Sockets의 내용을 3가지 클래스로 재분배

함수명 기능
Bind TCPListener로 이전
Listen TCPListener로 이전
Accept TCPListener로 이전
Connect TCPClient로 이전
SendWrite NetworkStream으로 이전
Receive/Read NetworkStream로 이전
Close TCPClient로 이전

 

 

TCPListener: TCP 네트워크 클라이언트에서 연결 수신

Start: 들어오는 연결 요청의 수신 시작

AcceptTcpClient: 연결 요청을 받음

 

TCPClient: TCP 네트워크 서비스에 대한 클라이언트 연결 제공

Connect: 연결 요청

GetStream: 데이터를 보내고 받는 데 사용되는 NetworkStream 반환

Close: TcpClient 인스턴스를 삭제하고 TCP 연결 닫기

 

NetworkStream: 기본 데이터 스트림 제공 / 데이터 송수신 메서드 제공

Read: 데이터를 읽고 메모리의 바이트 버퍼에 저장

Write: 바이트 버퍼에 데이터 수신

Flush: 스트림에서 데이터를 플러시(초기화)

 

 

C# 소켓 통신 흐름

 

Windows 소켓 서버의 제작

 

TCP 채팅 서버의 구성 (C#)

 

TCP 서버의 구성 (C#)

 

사용자 관리

사용자 관리는 연결된 소켓의 관리와 같다. 

사용자 관리를 위해 필요한 기능


1. 사용자 ID 및 활성화 소켓을 관리할 자료구조가 필요
2. 사용자 ID로 검색할 필요가 있어서 Dictionary 또는 Hash Table 사용
3. 새로 연결된 사용자는 자료구조에 추가
4. 연결이 끊어진 사용자는 자료구조에서 제거
5. 한 사용자의 메시지의 자료구조를 이용하여 모든 사람에게 Broadcast

 

Socket.Poll()

bool Poll(int microSeconds, SelectMode mode);

소켓의 연결 상태를 검사하는 메소드 (True 반환 조건)

 

1. SelectRead

- Accept()메소드가 성공

- 소켓에 읽어들일 데이터가 있을 때

- 연결이 종료되었을 때

 

2. SelectWrite

- Connect() 메소드가 성공

- 소켓으로 데이터를 전송할 수 있을 때

 

3. SelectError

- Connect() 메소드가 실패

 

 

Socket.Available()

네트워크에서 받아서 읽을 수 있는 데이터의 양을 가져옴

 

socket.Available == 0 이라는 뜻은 읽을 수 있는 데이터가 없다는 뜻

 

서버의 핵심 기능을 파악한다.

1. TCPListener을 이용 소켓을 생성

2. AcceptTcpClient를 이용 생성된 소켓을 받기

3. Thread를 이용, 흐름의 block없이 메세지 처리하기

4. 소켓의 연결상태 검사하기

5. 모든 사용자를 관리하기

6. 모든 사용자에게 메시지 전달하기

7. 종료된 사용자 제거

 

Hash Table (해시 테이블)

Key-Value

- 키(Key): 데이터를 식별하기 위해 필요한 정보(중복X)
- 값(Value): 키와 대응되는 데이터

 

해당 값의 인덱스를 일일히 기억하지 않도 키 값으로 데이터에 접근 가능

 

'학교 수업 > 컴퓨터네트워크' 카테고리의 다른 글

멀티스레드 채팅 클라이언트  (0) 2024.10.14
C#멀티 스레드  (0) 2024.10.13
스레드를 이용한 소켓 서버  (0) 2024.10.13
멀티스레드 통신  (1) 2024.10.13
네트워크 통신의 기초  (0) 2024.10.09
  1. C# 소켓 API의 구성
  2. Sockets의 내용을 3가지 클래스로 재분배
  3. C# 소켓 통신 흐름
  4. Windows 소켓 서버의 제작
  5. TCP 채팅 서버의 구성 (C#)
  6. TCP 서버의 구성 (C#)
  7. 사용자 관리
  8. Socket.Poll()
  9. Socket.Available()
  10. Hash Table (해시 테이블)
'학교 수업/컴퓨터네트워크' 카테고리의 다른 글
  • 멀티스레드 채팅 클라이언트
  • C#멀티 스레드
  • 스레드를 이용한 소켓 서버
  • 멀티스레드 통신
식혜드식혜
식혜드식혜
주로 알고리즘 문제 풀이& 포트폴리오를 기록하는 곳입니다!
식혜드식혜
식혜의 개발 성장 기록지
식혜드식혜
전체
오늘
어제
  • 분류 전체보기 (18)
    • 학교 수업 (14)
      • 수학 (0)
      • 영어독해와 작문 (0)
      • 엔진응용 (0)
      • 자료구조와 게임알고리즘 (4)
      • 컴퓨터네트워크 (8)
      • 게임프로그래밍 (2)
      • 방과후 2-1학기 (0)
    • 독후감 (0)
      • 문학 (0)
      • 전공 (0)
    • 프로그래밍 언어 (2)
      • C (0)
      • C++ (2)
      • C# (0)
    • 게임 분석 (0)
    • 유니티 (0)
    • 포트폴리오 (0)
      • 게임 프로젝트 (0)
      • 깃허브 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • 글쓰기

공지사항

인기 글

태그

  • 코딩테스트
  • 코드트리조별과제
  • 코드트리

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
식혜드식혜
멀티스레드 채팅 서버
상단으로

티스토리툴바

단축키

내 블로그

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

블로그 게시글

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

모든 영역

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

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