Java 104(ServerSocket, Socket, TCP Network, 키보드로 메세지(문자열)입력받아 전달하는 서버 프로그램)

Kang.__.Mingu·2024년 5월 23일
0

Java

목록 보기
106/108

EchoServerApp

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

// 클라이언트에서 보내온 메세지를 제공받아 출력하는 서버 프로그램 작성
public class EchoServerApp {
    public static void main(String[] args) {
        ServerSocket echoServer = null;

        try {
            echoServer = new ServerSocket(3000);
            System.out.println("[메세지] echo Server Running...");
            while (true) {
                // 클라이언트가 접근할 수 있게 도와줌
                Socket socket = echoServer.accept();

                // 소켓의 입력스트림을 반환받아 대량의 문자데이터(문자열)를 전달받을 수 있는
                // 입력스트림으로 확장
                BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));

                // 확장된 입력스트림으로 클라이언트가 보내온 문자열(메세지)를 반환받아 출력
                // => 입력스트림에 문자열이 없는 경우 스레드가 일시 중지되며 입력스트림에
                // 문자열이 전달되면 스레드가 재실행
                System.out.println("[" + socket.getInetAddress().getHostAddress() +
                    "] 님이 보내온 메세지 = " + in.readLine());

                socket.close();
            }
        } catch (IOException e) {
            System.out.println("[에러] 서버 네트워크에 문제가 발생 되었습니다.");
        } finally {
            try {
                echoServer.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

EchoClientApp

import java.io.*;
import java.net.Socket;
import java.net.UnknownHostException;

// 키보드로 문자열(메세지)를 입력받아 서버에 전달하는 클라이언트 프로그램 작성
public class EchoClientApp {
    public static void main(String[] args) throws IOException {
        // 키보드 입력스트림(System.in)을 대량의 문자데이터를 제공받을 수 있는 입력스트림으로 확장
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));

        // 확장된 입력스트림을 사용해 키보드 입력값을 문자열로 반환받아 저장
        System.out.print("전달 메세지 입력 >> ");
        String message = in.readLine();

        try {
            // 서버 접속
            Socket socket = new Socket("192.168.13.31", 3000);

            /*
            // 소켓의 출력스트림을 반환받아 대량의 문자데이터(문자열)를 전달할 수 있는 출력스트림으로 확장
            BufferedWriter out = new BufferedWriter(new OutputStreamWriter((socket.getOutputStream())));

            // 확장된 출력스트림을 사용하여 문자열(메세지)를 서버에 전달
            out.write(message);
            out.flush();
            */

            // 소켓의 출력스트림을 반환받아 모든 자료형의 값을 문자열로 전달할 수 있는 출력스트림으로
            // 확장하여 서버에 문자열 전달
            PrintWriter out = new PrintWriter(socket.getOutputStream());
            out.println(message);
            out.flush();

            socket.close();
        } catch (UnknownHostException e) {
            System.out.println("[에러] 서버를 찾을 수 없습니다.");

        }catch (IOException e) {
            System.out.println("[에러] 서버에 접속할 수 없습니다.");
        }
    }
}
profile
최선을 다해 꾸준히 노력하는 개발자 망고입니당 :D

0개의 댓글