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 |
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 |