서버 프로그램 구조 ¶
서버쪽에서는 총 4개의 Thread가 사용되었다. Thread는 메모리를 공유하면서도 독립적으로 실행될 수 있는 프로세스 단위라 할 수 있겠다. 4개의 Thread는 다음과 같다.
1. 사용자가 접속한다.
2. 사용자가 나간다.
2. 사용자가 나간다.
UserListControl : 사용자의 접속을 관리한다. 채팅에 접속하려는 사람이 원하는 ID를 기존의 사용자들과 비교하여, 없으면 채팅 접속을 허락하고, 있으면 다른 ID를 사용할 것을 권한다.
Broadcast : 클라이언트끼리 주고받는 대화 내용을 전달하는 클래스이다.
SendUser : 클라이언트 사용자가 현재 접속되어 있는 사람들의 ID를 알 수 있게 List에 사용자 이름을 보내주는 클래스이다.
클라이언트 프로그램의 구조 ¶
클라이언트쪽에는 4개의 Thread가 있다. JFrame을 사용한 클래스가 2개 있는데, 하나는 Login때 ID사용 허가를 확인한는 프레임이고, 다른 하나는 채팅의 기본 프레임이다. 4개의 Thread는 다음과 같다.
Login : 현재 채팅에 사용중인 ID와 사용하고자 하는 ID를 비교하여, 채팅 참가 허가 유무를 확인한다.
ChatMain : 채팅의 주 인터페이스를 관리하는 클래스이다. 이 클래스에서 대부분의 GUI를 관리하고, 채팅메세지보여준다. 또한 채팅에 접속한 사람들의 ID를 보여준다.
SendMessage : 서버로 메시지를 보낸다.
서버의 시작 ¶
클라이언트의 시작 ¶
클라이언트가 시작되면 Login을 위한 ID 체크를 한다. 서버에 접속하여 서버에 저장되어 있는 사용자 ID Vector에 사용하고자
하는 ID와 같은 ID가 있는지 없는지 비교한 후 결과를 클라이언트에 돌려준다. 이미 사용중인 ID이면 다른 ID를 사용할 것을 권하고, 사용가능하다면 채팅을 시작한다.
하는 ID와 같은 ID가 있는지 없는지 비교한 후 결과를 클라이언트에 돌려준다. 이미 사용중인 ID이면 다른 ID를 사용할 것을 권하고, 사용가능하다면 채팅을 시작한다.
클라이언트의 대기실 입장 ¶
클라이언트가 대기실에 입장하면 내부적으로 클라이언트는 서버쪽에 새 사용자가 접속했다는 메시지를 보낸다. 그러면서, Login 프레임대신 ChatMain 프레임을 보이게 한다. 이제부터 대기실에서 채팅이 가능하게 된다. 서버쪽에는 새 사용자가 대기실에 들어왔다는 것을 보여준다.
다른 사용자의 접속 ¶
새 사용자가 접속을 시도하면 처음과 마찬가지로 사용자 ID 체크를 하게된다. ID 사용 확인을 한 후에 대기실에 접속을한다. 대기실에 접속하면, 기존에 대기실에 있던 사용자들의 사용자 ID를 보여주는 리스트에 새로 들어오는 사용자의 리스트가 추가되면서, 채팅화면에 새로운 사용자가 들어왔다는 메시지가 나오게 된다.