= 프로그램 구조 = ì´ ì±„íŒ…í”„ë¡œê·¸ëž¨ì€ ë‹¤ë¥¸ ì—¬ëŠ ì±„íŒ… 프로그램처럼 서버와 í´ë¼ì´ì–¸íŠ¸ 부분으로 ë‚˜ëˆ„ì–´ì ¸ 있다. == 서버 프로그램 구조 == 서버쪽ì—서는 ì´ 4ê°œì˜ Threadê°€ 사용ë˜ì—ˆë‹¤. Thread는 메모리를 ê³µìœ í•˜ë©´ì„œë„ ë…립ì 으로 실행ë 수 있는 프로세스 ë‹¨ìœ„ë¼ í• ìˆ˜ ìžˆê² ë‹¤. 4ê°œì˜ Thread는 다ìŒê³¼ 같다. ReceiveEvent : í´ë¼ì´ì–¸íŠ¸ì˜ ì´ë²¤íŠ¸ë¥¼ 받는 부분ì´ë‹¤. ì´ ì´ë²¤íŠ¸ê°€ StatusDisplay í´ëž˜ìŠ¤ì— ì ìš©ëœë‹¤. ê°ê°ì˜ ì´ë²¤íŠ¸ëŠ” 다ìŒê³¼ 같다. 1. 사용ìžê°€ ì ‘ì†í•œë‹¤. 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를 보여주는 ê¸°ëŠ¥ì„ í•œë‹¤. = ì±„íŒ…ì˜ ë™ìž‘ ì›ë¦¬ = ì±„íŒ…ì˜ ë™ìž‘ì›ë¦¬ëŠ” ì‹¤ì œë¡œ ì±„íŒ…ì´ ì´ë£¨ì–´ì§€ëŠ” ê³¼ì •ì„ ì˜ˆë¡œ 추ì 하면서 설명하기로 한다. == ì„œë²„ì˜ ì‹œìž‘ == 서버가 시작하면 ReceiveEvent í´ëž˜ìŠ¤ì—ì„œ í´ë¼ì´ì–¸íŠ¸ë¡œë¶€í„° ì „ë‹¬ë˜ëŠ” Event를 기다리는 ë™ì‹œì— StatusDisplay ì“°ë ˆë“œì™€ 다른 ì“°ë ˆë“œë“¤ì„ ì‹œìž‘í•œë‹¤. == í´ë¼ì´ì–¸íŠ¸ì˜ 시작 == í´ë¼ì´ì–¸íŠ¸ê°€ 시작ë˜ë©´ Loginì„ ìœ„í•œ ID ì²´í¬ë¥¼ 한다. ì„œë²„ì— ì ‘ì†í•˜ì—¬ ì„œë²„ì— ì €ìž¥ë˜ì–´ 있는 ì‚¬ìš©ìž ID Vectorì— ì‚¬ìš©í•˜ê³ ìž í•˜ëŠ” ID와 ê°™ì€ IDê°€ 있는지 없는지 비êµí•œ 후 결과를 í´ë¼ì´ì–¸íŠ¸ì— ëŒë ¤ì¤€ë‹¤. ì´ë¯¸ ì‚¬ìš©ì¤‘ì¸ IDì´ë©´ 다른 ID를 ì‚¬ìš©í• ê²ƒì„ ê¶Œí•˜ê³ , 사용가능하다면 ì±„íŒ…ì„ ì‹œìž‘í•œë‹¤. == í´ë¼ì´ì–¸íŠ¸ì˜ 대기실 입장 == í´ë¼ì´ì–¸íŠ¸ê°€ ëŒ€ê¸°ì‹¤ì— ìž…ìž¥í•˜ë©´ 내부ì 으로 í´ë¼ì´ì–¸íŠ¸ëŠ” ì„œë²„ìª½ì— ìƒˆ 사용ìžê°€ ì ‘ì†í–ˆë‹¤ëŠ” 메시지를 보낸다. 그러면서, Login í”„ë ˆìž„ëŒ€ì‹ ChatMain í”„ë ˆìž„ì„ ë³´ì´ê²Œ 한다. ì´ì œë¶€í„° 대기실ì—ì„œ ì±„íŒ…ì´ ê°€ëŠ¥í•˜ê²Œ ëœë‹¤. 서버쪽ì—는 새 사용ìžê°€ ëŒ€ê¸°ì‹¤ì— ë“¤ì–´ì™”ë‹¤ëŠ” ê²ƒì„ ë³´ì—¬ì¤€ë‹¤. == 다른 사용ìžì˜ ì ‘ì† == 새 사용ìžê°€ ì ‘ì†ì„ ì‹œë„하면 처ìŒê³¼ 마찬가지로 ì‚¬ìš©ìž ID ì²´í¬ë¥¼ 하게ëœë‹¤. ID 사용 확ì¸ì„ í•œ í›„ì— ëŒ€ê¸°ì‹¤ì— ì ‘ì†ì„한다. ëŒ€ê¸°ì‹¤ì— ì ‘ì†í•˜ë©´, ê¸°ì¡´ì— ëŒ€ê¸°ì‹¤ì— ìžˆë˜ ì‚¬ìš©ìžë“¤ì˜ ì‚¬ìš©ìž ID를 보여주는 ë¦¬ìŠ¤íŠ¸ì— ìƒˆë¡œ 들어오는 사용ìžì˜ 리스트가 추가ë˜ë©´ì„œ, ì±„íŒ…í™”ë©´ì— ìƒˆë¡œìš´ 사용ìžê°€ 들어왔다는 메시지가 나오게 ëœë‹¤. == 실질ì ì¸ ì±„íŒ… == 2명 ì´ìƒì˜ 사용ìžê°€ ì ‘ì†í•œ ìƒíƒœì´ë¯€ë¡œ ì‹¤ì œë¡œ ì±„íŒ…ì´ ê°€ëŠ¥í•˜ê²Œ ëœë‹¤. ì±„íŒ…ì˜ ë‚´ìš©ì€ í´ë¼ì´ì–¸íŠ¸ì˜ TextFieldì˜ ë‚´ìš©ì„ DagagramPacketì— ë¯¸ë¦¬ ê¸°ì–µëœ ì„œë²„ìª½ì˜ ì£¼ì†Œì™€ í¬íŠ¸ë²ˆí˜¸ë¥¼ 추가하여 네트워í¬ë¡œ 보낸다. ì´ ë©”ì‹œì§€ë¥¼ 서버가 받아서 등ë¡ëœ ëª¨ë“ í´ë¼ì´ì–¸íŠ¸ìª½ìœ¼ë¡œ ë³´ë‚´ ëª¨ë“ í´ë¼ì´ì–¸íŠ¸ê°€ 메시지를 받아 ì±„íŒ…í™”ë©´ì— ì¶œë ¥í• ìˆ˜ 있게한다. == 채팅 종료 == ì±„íŒ…ì„ ì¢…ë£Œí• ë•ŒëŠ” 채팅 윈ë„ìš°ì˜ ì¢…ë£Œ ë²„íŠ¼ì„ ëˆ„ë¥´ë©´ 윈ë„ìš° 종료 ì´ë²¤íŠ¸ê°€ ë°œìƒí•œë‹¤. í´ë¼ì´ì–¸íŠ¸ëŠ” 채팅 종료를 확ì¸í•˜ëŠ” 옵션 패ë„ì„ ë³´ì—¬ì¤€ 후, ì„œë²„ìª½ì— ì±„íŒ…ì„ ì¢…ë£Œí•œë‹¤ëŠ” ë‚´ìš©ì„ ë³´ë‚¸ë‹¤. ì´ë•Œ 보내는 ë‚´ìš©ì€, ìžì‹ ì´ ì‚¬ìš©í•˜ê³ ìžˆëŠ” ID를 ì œê±°, ìžì‹ ì˜ ì£¼ì†Œë¥¼ ì œê±°, ì‚¬ìš©ìž 1ëª…ì˜ ê°ì†Œë“±ì´ë‹¤.