프로그램 구조 ¶
ì�´ 채팅프로그램ì�€ 다른 ì—¬ëŠ� 채팅 프로그램처럼 서버와 í�´ë�¼ì�´ì–¸íЏ 부분으로 ë‚˜ëˆ„ì–´ì ¸ 있다.
서버 프로그램 구조 ¶
서버쪽ì—�서는 ì´� 4ê°œì�˜ Threadê°€ 사용ë�˜ì—ˆë‹¤. Thread는 메모리를 ê³µìœ í•˜ë©´ì„œë�„ ë�…립ì �으로 실행ë� 수 있는 프로세스 단위ë�¼ í• ìˆ˜ ìžˆê² ë‹¤. 4ê°œì�˜ Thread는 다ì�Œê³¼ 같다.
ReceiveEvent : í�´ë�¼ì�´ì–¸íЏì�˜ ì�´ë²¤íŠ¸ë¥¼ 받는 부분ì�´ë‹¤. ì�´ ì�´ë²¤íŠ¸ê°€ StatusDisplay í�´ëž˜ìФì—� ì �ìš©ë�œë‹¤. ê°�ê°�ì�˜ ì�´ë²¤íŠ¸ëŠ” 다ì�Œê³¼ 같다.
1. 사용ìž�ê°€ ì ‘ì†�한다.
2. 사용�가 나간다.
2. 사용�가 나간다.
UserListControl : 사용ìž�ì�˜ ì ‘ì†�ì�„ 관리한다. 채팅ì—� ì ‘ì†�í•˜ë ¤ëŠ” 사람ì�´ ì›�하는 ID를 기존ì�˜ 사용ìž�들과 비êµ�하여, 없으면 채팅 ì ‘ì†�ì�„ í—ˆë�½í•˜ê³ , 있으면 다른 ID를 ì‚¬ìš©í• ê²ƒì�„ 권한다.
Broadcast : í�´ë�¼ì�´ì–¸íЏë�¼ë¦¬ ì£¼ê³ ë°›ëŠ” 대화 ë‚´ìš©ì�„ ì „ë‹¬í•˜ëŠ” í�´ëž˜ìФì�´ë‹¤.
SendUser : í�´ë�¼ì�´ì–¸íЏ 사용ìž�ê°€ 현재 ì ‘ì†�ë�˜ì–´ 있는 사람들ì�˜ ID를 알 수 있게 Listì—� 사용ìž� ì�´ë¦„ì�„ 보내주는 í�´ëž˜ìФì�´ë‹¤.
í�´ë�¼ì�´ì–¸íЏ 프로그램ì�˜ 구조 ¶
í�´ë�¼ì�´ì–¸íŠ¸ìª½ì—�는 4ê°œì�˜ Threadê°€ 있다. JFrameì�„ 사용한 í�´ëž˜ìŠ¤ê°€ 2ê°œ 있는ë�°, 하나는 Login때 ID사용 허가를 확ì�¸í•œëŠ” í”„ë ˆìž„ì�´ê³ , 다른 하나는 채팅ì�˜ 기본 í”„ë ˆìž„ì�´ë‹¤. 4ê°œì�˜ Thread는 다ì�Œê³¼ 같다.
Login : 현재 채팅ì—� 사용중ì�¸ ID와 ì‚¬ìš©í•˜ê³ ìž� 하는 ID를 비êµ�하여, 채팅 참가 허가 ìœ ë¬´ë¥¼ 확ì�¸í•œë‹¤.
ChatMain : 채팅ì�˜ 주 ì�¸í„°íŽ˜ì�´ìŠ¤ë¥¼ 관리하는 í�´ëž˜ìФì�´ë‹¤. ì�´ í�´ëž˜ìФì—�서 대부분ì�˜ GUI를 ê´€ë¦¬í•˜ê³ , 채팅메세지보여준다. ë˜�한 채팅ì—� ì ‘ì†�한 사람들ì�˜ ID를 보여준다.
ReceiveMessage : 서버로부터 ì „ë‹¬ë�˜ëŠ” 메시지를 받아서 ChatMain í�´ëž˜ìФì�˜ 메시지 ì¶œë ¥ 화면ì—� 보여주는 ì—í• ì�„ 한다.
SendMessage : 서버로 메시지를 보낸다.
UserList : ChatMain í�´ëž˜ìФì�˜ 사용ìž� Listì—� ì ‘ì†�한 사용ìž� ID를 보여주는 기능ì�„ 한다.
채팅ì�˜ ë�™ìž‘ ì›�리 ¶
채팅ì�˜ ë�™ìž‘ì›�리는 ì‹¤ì œë¡œ 채팅ì�´ ì�´ë£¨ì–´ì§€ëŠ” ê³¼ì •ì�„ 예로 ì¶”ì �하면서 설명하기로 한다.
서버ì�˜ 시작 ¶
í�´ë�¼ì�´ì–¸íЏì�˜ 시작 ¶
í�´ë�¼ì�´ì–¸íŠ¸ê°€ 시작ë�˜ë©´ Loginì�„ 위한 ID ì²´í�¬ë¥¼ 한다. 서버ì—� ì ‘ì†�하여 서버ì—� ì €ìž¥ë�˜ì–´ 있는 사용ìž� ID Vectorì—� ì‚¬ìš©í•˜ê³ ìž�
하는 ID와 ê°™ì�€ IDê°€ 있는지 없는지 비êµ�한 후 결과를 í�´ë�¼ì�´ì–¸íЏì—� ë�Œë ¤ì¤€ë‹¤. ì�´ë¯¸ 사용중ì�¸ IDì�´ë©´ 다른 ID를 ì‚¬ìš©í• ê²ƒì�„ ê¶Œí•˜ê³ , 사용가능하다면 채팅ì�„ 시작한다.
하는 ID와 ê°™ì�€ IDê°€ 있는지 없는지 비êµ�한 후 결과를 í�´ë�¼ì�´ì–¸íЏì—� ë�Œë ¤ì¤€ë‹¤. ì�´ë¯¸ 사용중ì�¸ IDì�´ë©´ 다른 ID를 ì‚¬ìš©í• ê²ƒì�„ ê¶Œí•˜ê³ , 사용가능하다면 채팅ì�„ 시작한다.
í�´ë�¼ì�´ì–¸íЏì�˜ 대기실 입장 ¶
í�´ë�¼ì�´ì–¸íŠ¸ê°€ 대기실ì—� 입장하면 ë‚´ë¶€ì �으로 í�´ë�¼ì�´ì–¸íŠ¸ëŠ” 서버쪽ì—� 새 사용ìž�ê°€ ì ‘ì†�했다는 메시지를 보낸다. 그러면서, Login í”„ë ˆìž„ëŒ€ì‹ ChatMain í”„ë ˆìž„ì�„ ë³´ì�´ê²Œ 한다. ì�´ì œë¶€í„° 대기실ì—�서 채팅ì�´ 가능하게 ë�œë‹¤. 서버쪽ì—�는 새 사용ìž�ê°€ 대기실ì—� 들어왔다는 것ì�„ 보여준다.
다른 사용ìž�ì�˜ ì ‘ì†� ¶
새 사용ìž�ê°€ ì ‘ì†�ì�„ 시ë�„하면 처ì�Œê³¼ 마찬가지로 사용ìž� ID ì²´í�¬ë¥¼ 하게ë�œë‹¤. ID 사용 확ì�¸ì�„ 한 후ì—� 대기실ì—� ì ‘ì†�ì�„한다. 대기실ì—� ì ‘ì†�하면, 기존ì—� 대기실ì—� 있ë�˜ 사용ìž�들ì�˜ 사용ìž� ID를 보여주는 리스트ì—� 새로 들어오는 사용ìž�ì�˜ 리스트가 추가ë�˜ë©´ì„œ, 채팅화면ì—� 새로운 사용ìž�ê°€ 들어왔다는 메시지가 나오게 ë�œë‹¤.
실질ì �ì�¸ 채팅 ¶
2명 ì�´ìƒ�ì�˜ 사용ìž�ê°€ ì ‘ì†�한 ìƒ�태ì�´ë¯€ë¡œ ì‹¤ì œë¡œ 채팅ì�´ 가능하게 ë�œë‹¤. 채팅ì�˜ ë‚´ìš©ì�€ í�´ë�¼ì�´ì–¸íЏì�˜ TextFieldì�˜ ë‚´ìš©ì�„
DagagramPacketì—� 미리 기억ë�œ 서버쪽ì�˜ 주소와 í�¬íŠ¸ë²ˆí˜¸ë¥¼ 추가하여 네트워í�¬ë¡œ 보낸다. ì�´ 메시지를 서버가 받아서 등ë¡�ë�œ ëª¨ë“ í�´ë�¼ì�´ì–¸íŠ¸ìª½ìœ¼ë¡œ ë³´ë‚´ ëª¨ë“ í�´ë�¼ì�´ì–¸íŠ¸ê°€ 메시지를 받아 채팅화면ì—� ì¶œë ¥í• ìˆ˜ 있게한다.
DagagramPacketì—� 미리 기억ë�œ 서버쪽ì�˜ 주소와 í�¬íŠ¸ë²ˆí˜¸ë¥¼ 추가하여 네트워í�¬ë¡œ 보낸다. ì�´ 메시지를 서버가 받아서 등ë¡�ë�œ ëª¨ë“ í�´ë�¼ì�´ì–¸íŠ¸ìª½ìœ¼ë¡œ ë³´ë‚´ ëª¨ë“ í�´ë�¼ì�´ì–¸íŠ¸ê°€ 메시지를 받아 채팅화면ì—� ì¶œë ¥í• ìˆ˜ 있게한다.
채팅 종료 ¶
채팅ì�„ ì¢…ë£Œí• ë•ŒëŠ” 채팅 윈ë�„ìš°ì�˜ 종료 버튼ì�„ 누르면 윈ë�„ìš° 종료 ì�´ë²¤íŠ¸ê°€ ë°œìƒ�한다. í�´ë�¼ì�´ì–¸íŠ¸ëŠ” 채팅 종료를 확ì�¸í•˜ëŠ” 옵션 패ë„�ì�„ 보여준 후, 서버쪽ì—� 채팅ì�„ 종료한다는 ë‚´ìš©ì�„ 보낸다. ì�´ë•Œ 보내는 ë‚´ìš©ì�€, ìž�ì‹ ì�´ ì‚¬ìš©í•˜ê³ ìžˆëŠ” ID를 ì œê±°, ìž�ì‹ ì�˜ 주소를 ì œê±°, 사용ìž� 1명ì�˜ ê°�소등ì�´ë‹¤.









