TCP채팅 프로그램(단방향)

Soozoo·2024년 7월 1일

JAVA

목록 보기
37/41

1. 서버 구현

서버는 클라이언트의 연결을 기다리고, 클라이언트가 보내는 메시지를 수신하여 출력합니다.

package ex03.net.tcp;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;

public class ServerChat {
    public static void main(String[] args) throws IOException {
        int port = 8000;
        ServerSocket server = new ServerSocket(port);
        Socket client = null;
        System.out.println("Chat Server Start~~~~");

        while (true) {
            client = server.accept();
            InputStream is = client.getInputStream();
            BufferedReader br = new BufferedReader(new InputStreamReader(is));
            PrintStream ps = new PrintStream(System.out);

            ps.print(client.getInetAddress().getHostAddress());
            String str = br.readLine();
            byte[] buffer = str.getBytes("utf-8");
            String message = new String(buffer, "utf-8");

            ps.print("          :  에서 수신 메세지 ==> " + message);
            br.close();
            client.close();
        }
    }
}

서버 코드 설명

  1. 서버 소켓 생성: ServerSocket을 8000번 포트에 바인딩하여 생성합니다.
  2. 클라이언트 연결 수락: accept() 메서드를 호출하여 클라이언트의 연결 요청을 수락합니다.
  3. 입력 스트림 설정: BufferedReader를 사용하여 클라이언트로부터 메시지를 읽어옵니다.
  4. 클라이언트 메시지 수신 및 출력: 클라이언트로부터 수신한 메시지를 콘솔에 출력합니다.
  5. 자원 해제: 사용한 스트림과 소켓을 닫습니다.

2. 클라이언트 구현

클라이언트는 서버에 연결하여 메시지를 보내고, 서버로부터 응답을 받습니다.

package ex03.net.tcp;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintStream;
import java.net.Socket;

public class ClientChat {
    public static void main(String[] args) throws IOException {
        int port = 8000;
        String ip, str;

        PrintStream ps = new PrintStream(System.out);
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        ps.print("접속할 서버 ip ===>"); ip = br.readLine();
        ps.print("전송할 메세지 ===>"); str = br.readLine();

        byte[] buffer = str.getBytes("utf-8");
        String message = new String(buffer, "utf-8");

        Socket client = new Socket(ip, port);

        OutputStream os = client.getOutputStream();
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(os));
        bw.write(message, 0, message.length());
        bw.flush(); // 버퍼 비우기

        bw.close(); client.close();
        ps.println(ip + " 에 메세지 전송 성공~~");
        ps.close();
    }
}

클라이언트 코드 설명

  1. 서버에 연결: 지정된 서버 IP와 포트로 소켓을 생성하여 서버에 연결합니다.
  2. 사용자 입력: 사용자로부터 서버 IP와 전송할 메시지를 입력받습니다.
  3. 출력 스트림 설정: BufferedWriter를 사용하여 서버로 메시지를 전송합니다.
  4. 메시지 전송: 서버로 메시지를 전송하고, 성공 메시지를 콘솔에 출력합니다.
  5. 자원 해제: 사용한 스트림과 소켓을 닫습니다.

실행 방법

  1. 서버 실행: ServerChat 클래스를 먼저 실행하여 서버를 시작합니다. "Chat Server Start" 메시지가 콘솔에 출력되면 서버가 정상적으로 실행된 것입니다.
  2. 클라이언트 실행: ClientChat 클래스를 실행하여 클라이언트가 서버에 연결하고 메시지를 전송합니다. 클라이언트와 서버 간의 메시지 주고받기를 콘솔에서 확인할 수 있습니다.

실행 결과

1.서버 오픈

2.서버 응답확인

profile
넙-죽

0개의 댓글