티스토리 뷰

JAVA

자바 채팅 프로그램

Howu 2024. 5. 29. 16:24

* 요구사항

1 Client는 Server에 등록 할 수 있어야 한다. (식별가능 ID)
2 Client사이에는 1:1 또는 1:N으로 Chatting이 가능해야 한다.
3 Client는 귓속말이 가능해야 한다.
4 Client대화창으로 대화를 해야 한다.
5 ServerClient를 등록하고 관리 할 수 있어야 한다.
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
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함