티스토리 뷰
* 요구사항
1 | Client는 Server에 등록 할 수 있어야 한다. (식별가능 ID) |
2 | Client사이에는 1:1 또는 1:N으로 Chatting이 가능해야 한다. |
3 | Client는 귓속말이 가능해야 한다. |
4 | Client는 대화창으로 대화를 해야 한다. |
5 | Server는 Client를 등록하고 관리 할 수 있어야 한다. Server가 접속한 Client 상태를 전송할 수 있어야 한다. |
* Client-Server 채팅 프로그램 흐름
Client의 연결 요청 => 미리 실행되어서 ServerSocket을 생성하고 accept()로 클라이언트의 요청을 기다리고 있던 Server는 연결 요청을 승인한다. => 연결 되는 순간 Socket 객체가 생성되어 Client-Server간 데이터를 주고받을 수 있는 상태가 되었고, 여러 Client가 요청할 때마다 Socket을 생성하여 데이터를 주고받을 수 있으며 각각 독립적인 작업 단위인 스레드를 생성하게된다 => Client가 ID를 입력하여 로그인 하면 대화말을 전송할 수 있고, ID는 해시테이블에 key-value 형태로 저장되어 관리된다. => Client의 일반 대화말 메시지 전송 시 Server는 이를 받아서 모든 Client에게 전송할 수 있다. (브로드캐스팅) => [/w 유저아이디 대화말] 명령어 형식으로 Client가 대화말을 전송하면 Server는 특정 Client에게만 귓속말을 전송할 수 있다 => 여러 Client의 메시지 이력, 현재 접속한 유저 목록을 Server는 모든 Client에게 전송한다. => 각 Client의 연결상태(연결or연결 끊어짐)에 따라 Server는 각 Client의 연결상태를 Client들에게 전달한다.
서버소켓이 먼저 생성되어 클라이언트 요청을 받아들일 수 있는 상태에서 클라이언트 요청들이 오면 각 클라이언트의 요청마다 소켓이 만들어지고 데이터를 주고받을 수 있게 되고 각각 독립적인 작업 단위인 스레드가 생성되어 데이터를 주고받을 수 있는 있는 상태가 된다. 클라이언트-서버가 연결된 뒤 대화말을 전송하기 위해 먼저 로그인을 진행해야하며 로그인 시 입력한 ID는 Hashtable에 key-value 형태로 저장되어 관리된다. 여러 클라이언트의 각 스레드는 List에 저장되어 관리된다. 데이터 스트림을 통해 클라이언트가 입력한 메시지를 서버에서 받아 여러 클라이언트로 전송할 수 있고 특정 클라이언트로만 보내는 메시지, 귓속말도 가능하다. 입력한 메시지들은 모두 서버에 저장되었다가 모든 클라이언트에게 전송되고 유저목록 역시 마찬가지이다. 클라이언트의 연결상태는 연결 or 연결이 끊어졌을 때에 따라 다르게 전송된다.
* 액티비티 다이어그램
1.Client 식별 및 연결
- Client 식별 ID 생성/획득
- Server에 연결 요청
- 연결 확인 및 인증
2. 채팅 기능
- 1:1 채팅 요청
- 다자간 채팅 요청
- 채팅 메시지 전송
- 채팅 메시지 수신
3. 귓속말 기능
- 귓속말 상대 선택
- 귓속말 메시지 전송
- 귓속말 메시지 수신
4. 대화창 관리
- 대화창 열기
- 대화창 닫기
- 대화 메시지 표시
5. Server 관리 기능
- Client 등록
- Client 상태 확인
- Client 상태 전송
client
1) Client가 시작하여 ID를 생성/획득한다.
2) Server에 연결 요청을 보낸다.
3) Server로부터 연결 확인 및 인증을 받는다.
4) 채팅을 시작하여 1:1 채팅 또는 다자간 채팅을 선택한다.
- 채팅 메시지를 입력하고 전송한다.
- 다른 Client로부터 메시지를 수신한다.
5) 특정 Client에게 귓속말을 전송할 수 있다.
- 귓속말 상대를 선택하고 메시지를 입력, 전송한다.
6) 대화창을 열고 닫을 수 있다.
- 대화 메시지를 화면에 표시한다.
server
1) Client로부터 연결 요청을 받는다.
2) Client를 등록하고 관리한다.
3) Client 상태를 확인하고 저장한다.
- 모든 접속한 Client의 상태를 다른 Client에게 전송한다.
'JAVA' 카테고리의 다른 글
[멀티스레드와 동시성] - 2. 스레드 생성과 실행 (0) | 2024.07.25 |
---|---|
[멀티스레드와 동시성] - 1. 프로세스와 스레드 (0) | 2024.07.25 |
다형성2 (0) | 2024.01.15 |
다형성1 (0) | 2024.01.07 |
1. JDK, JRE, JVM (0) | 2023.11.29 |