JAVA - 19
카테고리: java
* 단톡방 만들기 2
Chatting_Server.java
- 이 클래스는 네트워크 통신을 위한 Socket 객체, GUI를 위한 Swing 구성 요소 (예: JFrame, JTextField, JTextArea, JLabel, JPanel, JButton) 및 서버와의 통신을 위한 입력/출력 스트림과 같은 여러 인스턴스 변수를 정의합니다.
- 클래스의 생성자는 사용자에게 채팅 이름을 입력하도록 요청하고, GUI 구성 요소를 생성하고, 이벤트 리스너를 설정하여 채팅 클라이언트를 초기화합니다.
- actionPerformed(ActionEvent e) 메서드는 GUI 구성 요소에서 생성된 이벤트를 처리합니다. 이벤트 소스가 텍스트 필드 (jtf)인 경우, 입력된 메시지가 비어 있는지 확인하고 비어 있다면 경고 메시지를 표시합니다. 그렇지 않은 경우, 서버로 채팅 메시지를 전송합니다. 이벤트 소스가 종료 버튼 (jbtn)인 경우, 서버에 종료 메시지를 전송하고 프로그램을 종료합니다.
- init() 메서드는 소켓을 생성하고 통신을 위한 입력/출력 스트림을 설정함으로써 서버와의 연결을 설정합니다. 또한 서버로부터 메시지를 수신하기 위해 별도의 스레드 (Runnable)를 시작합니다.
- main(String[] args) 메서드는 JFrame의 룩 앤 필 (Look and Feel)을 설정하고, ChattingClient를 초기화하기 위해 클래스의 인스턴스를 생성하고 init() 메서드를 호출합니다.
- run() 메서드는 별도의 스레드에서 실행되며, 서버로부터 메시지를 지속적으로 읽고 채팅 영역 (jta)을 업데이트합니다. 일반 채팅 메시지와 종료 메시지와 같은 다른 유형의 메시지를 처리하여 채팅 영역에 추가합니다.
전반적으로 ChattingClient 클래스는 멀티 채팅 클라이언트를 위한 그래픽 사용자 인터페이스를 제공하고, 소켓을 사용하여 서버와의 통신을 처리합니다.
Chatting_Client.java
- 이 클래스는 JFrame을 상속하여 GUI 인터페이스를 제공합니다. 클래스 내부에는 클라이언트들의 접속 스레드를 담는 리스트, Socket 객체, JTextArea, JTextField, ServerSocket 등의 인스턴스 변수가 있습니다.
- 생성자는 프레임의 제목을 설정하고, JTextArea와 JTextField를 생성하여 프레임에 추가합니다. JTextArea는 입력이 불가능하도록 설정되고, JScrollPane을 사용하여 스크롤 가능하도록 합니다. JTextField는 입력이 불가능하도록 설정합니다.
- 생성자에서는 또한 ArrayList를 생성하여 클라이언트의 접속 스레드를 저장할 수 있도록 준비합니다.
- 생성자에서는 ServerSocket을 생성하고, 포트 5001에서 클라이언트의 연결을 수락하기 위해 accept() 메서드를 호출합니다. 연결이 수락되면 MultiServerThread 객체를 생성하여 리스트에 추가하고 시작합니다. 이 과정을 반복하여 여러 클라이언트의 연결을 처리합니다.
- MultiServerThread는 채팅 중개 스레드를 나타내는 내부 클래스입니다. 각 클라이언트의 소켓과 입출력 스트림을 관리하며, 받은 메시지를 처리하고 다른 클라이언트에게 전송하는 역할을 합니다.
- MultiServerThread의 run() 메서드는 스레드의 실행 동작을 정의합니다. 소켓과 입출력 스트림을 생성하고, while 루프를 통해 메시지를 읽어들이고 처리합니다. 메시지가 “exit”인 경우는 클라이언트의 종료를 의미하며, 해당 메시지를 다른 클라이언트에게 전송한 후 스레드를 정지합니다. 그렇지 않은 경우는 받은 메시지를 다른 클라이언트에게 전송합니다.
- MultiServerThread의 broadCasting() 메서드는 리스트에 저장된 모든 접속 중인 클라이언트에게 메시지를 전송합니다.
- MultiServerThread의 send() 메서드는 해당 클라이언트에게 메시지를 전송합니다.
- main() 메서드는 ChattingServer 객체를 생성하여 서버를 시작합니다.
ChattingServer 클래스는 다중 클라이언트의 채팅을 처리하기 위한 중개 서버 역할을 합니다. 클라이언트의 접속을 받고, 각 클라이언트와의 통신을 관리하여 메시지를 중개합니다. GUI를 통해 서버의 실행 상태를 확인할 수 있습니다.
결과화면 :


댓글 남기기