네트워킹

실전 자바 강좌 (ver.2018) - 초보부터 개발자 취업까지!! 강의를

개인공부하며 정리하는 용도의 포스팅입니다.

학습목표


  • 네트워크에 연결되어 있는 대상 사이에 데이터를 전송하는 방법에 대해서 학습

네트워크 데이터 입력 및 출력


네트워크 대상(객체)사이에 입/출력(InputStream, OutputStream)을 이용해서

데이터를 입력하고 출력한다.

소켓(Socket)


네트워크상에서 데이터를 주고받기 위한 장치다.

socket

Socket 클래스


서버는 클라이언트를 맞을 준비를 하고 있다가 클라이언트의 요청에 반응한다.

socket1

코드 입력 전 화면

socket2

serverSocket = new ServerSocket(9000);
System.out.println("클라이언트 맞을 준비 완료~~");

socket = serverSocket.accept();
System.out.println("클라이언트 연결~~");
System.out.println("socket: " + socket);

코드 입력 후 화면

socket3

Client와 Server 소켓(Socket)


서버에 ServerSocket을 준비하고 클라이언트에서 Socket을 이용해서 접속한다.

Client 측

Socket socket = null;

try {
    socket = new Socket("localhost", 9000);
    System.out.println("서버 연결~~");
    System.out.println("socket: " + socket);
}

socket4

Server 측

ServerSocket serverSocket = null;
Socket socket = null;

try {
    serverSocket = new ServerSocket(9000);
    System.out.println("클라이언트 맞을 준비 완료~~");
    
    socket = serverSocket.accept();
    System.out.println("클라이언트 연결~~");
    System.out.println("socket: " + socket);
}

socket5

양방향 통신


클라이언트와 서버는 InputStream, OutputStream을 이용해서 양방향 통신을 할수 있다.

코드 예시

try {
    
    socket = new Socket("localhost", 9000);
    System.out.println("서버 연결 완료~~");
    
    outputStream = socket.getOutputStream();
    dataOutputStream = new DataOutputStream(outputStream);
    
    inputStream = socket.getInputStream();
    dataInputSteam = new DataInputStream(inputStream);
    
    scanner = new Scanner(System.in);
    
    while(true) {
        System.out.println("메시지 입력~~");
        String outMessage = scanner.nextLine();
        dataOutputStream.writeUTF(outMessage);
        dataOutputStream.flush();
        
        String inMessage = dataInputStream.readUTF();
        System.out.println("inMessage: " + inMessage);
        
        if(outMessage.equals("STOP")) break;
    }
}

try {

    serverSocket = new ServerSocket(9000);
    System.out.println("클라이언트 맞을 준비 완료~~");
    
    socket = serverSocket.accept();
    System.out.println("클라이언트 연결~~");
    System.out.println("socket: " + socket);

    inputStream = socket.getInputStream();
    dataInputSteam = new DataIntputStream(inputStream);
    
    outputStream = socket.getOutputStream();
    dataOutputSteam = new DataOutputStream(outputStream);

    while(true) {
        String clientMessage = dataInputStream.readUTF();
        System.out.println("clientMessage: " + clientMessage);

        dataOutputStream.writeUTF("메시지 전송 완료~~");
        dataOutputStream.flush();

        if(clientMessage.equals("STOP")) break;
    }
}

Reference


실전 자바 강좌 (ver.2018) - 네트워킹

Comments