본문 바로가기

자바(java)

2명이서 실시간 채팅 앱: 사용자 간에 실시간 메시지를 교환할 수 있는 채팅 애플리케이션을 개발합니다.

반응형

실시간 채팅 애플리케이션 개발을 위한 자세한 안내를 드리겠습니다. 이 프로젝트는 Java를 사용하여 두 사용자 간의 실시간 메시지 교환 기능을 구현합니다. 기본적인 네트워킹, 스레드, 그리고 GUI 컴포넌트에 대한 설명을 포함합니다.

1. 내용 설명

실시간 채팅 애플리케이션은 두 명의 사용자가 네트워크를 통해 메시지를 교환할 수 있게 해주는 프로그램입니다. 서버와 클라이언트 모델을 사용하여 하나의 사용자가 서버 역할을 하고, 다른 사용자가 클라이언트로 연결되어 메시지를 주고받습니다.

2. 프로그램간 사용 함수 설명

  • startServer(int port): 서버를 시작하는 메소드입니다.
  • connectToServer(String host, int port): 클라이언트가 서버에 연결하는 메소드입니다.
  • sendMessage(String message): 메시지를 보내는 메소드입니다.
  • receiveMessage(): 메시지를 수신하는 메소드입니다.

3. 코딩 내용 (서버와  클라이언트로 구분)

서버 

 

import java.io.*;
import java.net.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class ChatServer {
    private ServerSocket serverSocket;
    private Socket clientSocket;
    private PrintWriter out;
    private BufferedReader in;
    private JFrame frame;
    private JTextArea textArea;
    private JTextField textField;
    private JButton sendButton;

    public ChatServer(int port) {
        initializeUI();
        startServer(port);
    }

    private void initializeUI() {
        frame = new JFrame("Chat Server");
        textArea = new JTextArea(16, 30);
        textArea.setEditable(false);
        textField = new JTextField(20);
        sendButton = new JButton("Send");

        frame.getContentPane().add(new JScrollPane(textArea), BorderLayout.CENTER);
        frame.getContentPane().add(textField, BorderLayout.SOUTH);
        frame.getContentPane().add(sendButton, BorderLayout.EAST);

        sendButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                String messageToSend = textField.getText();
                textArea.append("Me: " + messageToSend + "\n");
                out.println(messageToSend);
                textField.setText("");
            }
        });

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setVisible(true);
    }

    private void startServer(int port) {
        try {
            serverSocket = new ServerSocket(port);
            textArea.append("Waiting for client...\n");
            clientSocket = serverSocket.accept();
            textArea.append("Client connected.\n");

            out = new PrintWriter(clientSocket.getOutputStream(), true);
            in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));

            String inputLine;
            while ((inputLine = in.readLine()) != null) {
                textArea.append("Client: " + inputLine + "\n");
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        new ChatServer(12345);
    }
}

 

 

클라이언트 

 

import java.io.*;
import java.net.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class ChatClient {
    private Socket socket;
    private PrintWriter out;
    private BufferedReader in;
    private JFrame frame;
    private JTextArea textArea;
    private JTextField textField;
    private JButton sendButton;

    public ChatClient(String host, int port) {
        initializeUI();
        connectToServer(host, port);
    }

    private void initializeUI() {
        frame = new JFrame("Chat Client");
        textArea = new JTextArea(16, 30);
        textArea.setEditable(false);
        textField = new JTextField(20);
        sendButton = new JButton("Send");

        frame.getContentPane().add(new JScrollPane(textArea), BorderLayout.CENTER);
        frame.getContentPane().add(textField, BorderLayout.SOUTH);
        frame.getContentPane().add(sendButton, BorderLayout.EAST);

        sendButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                String messageToSend = textField.getText();
                textArea.append("Me: " + messageToSend + "\n");
                out.println(messageToSend);
                textField.setText("");
            }
        });

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setVisible(true);
    }

    private void connectToServer(String host, int port) {
        try {
            socket = new Socket(host, port);
            out = new PrintWriter(socket.getOutputStream(), true);
            in = new BufferedReader(new InputStreamReader(socket.getInputStream()));

            String inputLine;
            while ((inputLine = in.readLine()) != null) {
                textArea.append("Server: " + inputLine + "\n");
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        new ChatClient("localhost", 12345);
    }
}

 

 

4. 전문용어

  • Java: 객체 지향 프로그래밍 언어입니다.
  • Socket: 네트워크를 통한 통신을 가능하게 하는 엔드포인트입니다.
  • ServerSocket: 서버 측에서 클라이언트의 연결 요청을 기다리는 소켓입니다.
  • GUI (Graphical User Interface): 사용자와 상호작용하는 그래픽 인터페이스입니다.
  • Thread: 동시에 실행될 수 있는 프로그램의 흐름입니다.

5. 라이브러리 추가 및 실행 방법

라이브러리

  • Java 표준 라이브러리 사용 (java.io, java.net, javax.swing)

실행 방법

  1. Java 개발 환경을 설치합니다.
  2. 위의 코드를 Java 파일로 저장합니다.
  3. 서버와 클라이언트를 각각 컴파일하고 실행합니다.

 

서버 

컴파일: javac ChatServer.java

실행: java ChatServer

 

클라이언트

컴파일: javac ChatClient.java

실행: java ChatClient

반응형