Skip to content

Latest commit

 

History

History
118 lines (90 loc) · 3.54 KB

java로 간단한 socket 프로그램만들기.md

File metadata and controls

118 lines (90 loc) · 3.54 KB

java.net의 Socket class와 Thread를 이용해 간단한 socket 통신 프로그램을 만들어보자.

socket client

public class ServerMain {

    public static void main(String[] args) {

        // ServerSocket 클래스로 객체를 생성해준다. port는 6000으로 설정해주었다.
        try (ServerSocket ss = new ServerSocket(6000)) {

            // accept() 는 클라이언트가 들어오는 것을 대기 하는 역할을 한다.
            // 클라이언트가 설정해준 포트(6000)로 연결을 시도한다면 accept 메소드는 대기를 풀고, 클라이언트와 연결시키는 Socket 클래스를 생성하여 반환한다.
            Socket sc = ss.accept();

            // input과 output 작업을 수행할 스레드를 별도로 정의하여 실행시킨다.
            Thread inputThread = new InputThread(sc);
            Thread outputThread = new OutputThread(sc);

            inputThread.start();
            outputThread.start();

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
public class ClientMain {

    public static void main(String[] args) {

        try {

            // Socket 객체를 생성하여 연결을 시도한다.
            // 연결할 IP 주소와 Port 번호를 매개변수로 넘겨 주어서, 해당 주소로 연결을 시도하게 한다.
            Socket sc = new Socket("127.0.0.1", 6000);

            // 연결이 완료 되었다면 여기에서도 마찬가지로 input과 output 작업을 수행할 스레드를 별도로 정의하여 실행시킨다
            Thread inputThread = new InputThread(sc);
            Thread outputThread = new OutputThread(sc);

            inputThread.start();
            outputThread.start();

        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
}

Input / Output Thread

public class OutputThread extends Thread {

    private final Socket sc;
    private final Scanner scanner;

    public OutputThread(Socket sc) {
        this.sc = sc;
        this.scanner = new Scanner(System.in);
    }

    @Override
    public void run() {
        try {
            OutputStream os = sc.getOutputStream();
            PrintWriter pw = new PrintWriter(os, true);
            while (true) {
                // Scanner로 들어온 값을 읽어서 PrintWriter로 출력한다.
                pw.println(scanner.nextLine());
            }
        } catch (IOException e) {
            throw new RuntimeException(e);
        } finally {
            this.scanner.close();
        }
    }
}
public class InputThread extends Thread {

    private final Socket sc;

    public InputThread(Socket sc) {
        this.sc = sc;
    }

    @Override
    public void run() {
        try {
            InputStream is = sc.getInputStream();
            BufferedReader br = new BufferedReader(new InputStreamReader(is));
            while (true) {
                // InputStream을 BufferedReader로 읽어서 출력한다.
                System.out.println(br.readLine());
            }
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
}

결과

Server나 Client 중 한 쪽에서 메시지를 입력하면 서로 잘 전송되는 것을 볼 수 있다.

image

image