1:1 양방향 통신 - 23

목차

    1:1 양방향 통신

    1. 서버측 코드 작성

    인풋스트림, 아웃풋 스트림 둘다 필요하다

    package ch03;
    
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.PrintWriter;
    import java.net.ServerSocket;
    import java.net.Socket;
    
    public class ServerFile {
    
    	public static void main(String[] args) {
    
    		// 준비물
    		// 1. 서버 소켓이 필요하다.
    		// 2. 포트 번호가 필요하다. ( 0 ~ 65535 까지 존재)
    		// 2.1 잘 알려진 포트 번호 : 주로 시스템 레벨 - 0 ~ 1023까지 사용
    		// 2.2 등록 가능한 포트 : 1024 ~ 49151까지
    		// 2.3 동적/사설 포트 번호 - 그 외 임시 사용을 위해 할당된다.
    
    		ServerSocket serverSocket = null;
    		Socket socket = null;
    
    		try {
    			serverSocket = new ServerSocket(5001);
    			System.out.println("서버를 시작 합니다 - 포트 번호 : 5001 ");
    			socket = serverSocket.accept(); // while -->
    			System.out.println(">>> 클라이언트가 연결 하였습니다. <<<");
    
    			// 대상은 소켓이다 ( input stream ) 작업
    			InputStream input = socket.getInputStream();
    			BufferedReader reader = new BufferedReader(new InputStreamReader(input));
    
    			// 1. 클라이언트에서 먼저 보낸 데이터를 읽는다.
    			// 실제 데이터를 읽는 행위가 필요 하다.
    			String message = reader.readLine();
    			System.out.println("클라이언트 측 메세지 전달 받음 : " + message);
    
    			// 2. 클라이언트 측으로 데이터를 보낸다.
    			// 대상은 소켓이다. (output stream) 작업
    			PrintWriter writer = new PrintWriter(socket.getOutputStream(), true); // auto flush
    			writer.println("난 서버야, 클라이언트 반가워"); // 줄바꿈 포함 메서드 안녕 --> 안녕\n
    
    		} catch (Exception e) {
    			e.printStackTrace();
    		} finally {
    			if (socket != null) {
    				try {
    					socket.close();
    				} catch (IOException e) {
    					e.printStackTrace();
    				}
    			}
    			if (serverSocket != null) {
    				try {
    					serverSocket.close();
    				} catch (IOException e) {
    					e.printStackTrace();
    				}
    			}
    		}
    
    	}
    
    }

    2. 클라이언트 측 코드 작성

    package ch03;
    
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.PrintWriter;
    import java.net.Socket;
    
    public class ClientFile {
    
    	public static void main(String[] args) {
    
    		Socket socket = null;
    		try {
    			socket = new Socket("localhost", 5001);
    			PrintWriter writer = new PrintWriter(socket.getOutputStream(), true);
    
    			writer.println("안녕 반가워 ~ "); // 줄바꿈 처리를 하자
    
    			// 서버로부터 데이터를 받기 위한 입력 스트림이 필요하다.
    			BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
    			String message = reader.readLine();
    			System.out.println("서버측 응답 : " + message);
    		} catch (Exception e) {
    			e.printStackTrace();
    		} finally {
    			if (socket != null) {
    				try {
    					socket.close();
    				} catch (IOException e) {
    					e.printStackTrace();
    				}
    			}
    		}
    	}
    
    }

    Java 유용한 클래스 - 3 으로 돌아가기