자바로 아주 간단한 소켓통신을 해보자!

kihoo_ni·2024년 4월 7일

자바로 해보는 소켓통신

package com.nhnacademy;

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

public class Exam06_1 {
    public static void main(String[] args) {
        String host = "localhost";
        int port = 1234;

        try ( // 호스트이름은 localhost, 포트번호는 1234로 서버에 연결하여 소켓생성!
                Socket socket = new Socket(host, port);

                // 서버(터미널)에서 입력.
                BufferedReader socketR = new BufferedReader(new InputStreamReader(socket.getInputStream()));

                // 입출력창에 입력.
                BufferedReader terminalR = new BufferedReader(new InputStreamReader(System.in));) {
            System.out.println("서버연결 성공");

            Sender sender = new Sender(terminalR, socket);
            sender.start();
            String line;

            // exit 입력시 서버종료
            while (!(line = socketR.readLine()).equals("exit")) {
                // 서버(터미널)에서 입력된 것이 입출력창으로 출력.
                System.out.println(line);
            }

        } catch (Exception e) {
            System.out.println("서버연결 실패");
        }

    }

}

class Sender extends Thread {

    BufferedReader terminalR;
    Socket socket;

    public Sender(BufferedReader terminalR, Socket socket) {
        this.terminalR = terminalR;
        this.socket = socket;
    }

    @Override
    public void run() {

        try (BufferedWriter socketW = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));) {
            String line;
            // 입출력창에서 exit 입력시 서버와 차단됨.
            while (!(line = terminalR.readLine()).equals("exit")) {
                // 입출력창에서 입력한 것이 서버로 출력됨
                socketW.write(line + "\n");
                socketW.flush();

            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
  1. 맨처음 터미널에서 서버를 연결하지 않고 해당 코드를 실행하면 다음과 같은 일이 일어난다.
  2. 따라서 서버를 꼭 연결해주자
  3. 서버를 연결하면 다음과 같이 접속할 수 있다.

    이제 서버와 유저간에 통신이 가능하다.


    콘솔창에서 유저가 입력하면 서버가 답해주고 서로 대화를 주고 받을 수 있다.

이처럼 아주 간단하게 소켓통신을 할 수 있다. 다만 스레드를 이용했으므로 동기화에 유의 하여야 한다. 이런 디테일한 부분들은 추가적으로 공부하고 적용해보자!

0개의 댓글