JAVA

서버-클라이언트 채팅 예제

merryna 2021. 7. 22. 13:50
반응형
import java.io.*;
import java.net.*;
import java.util.*;

public class ServerEx {
    public static void main(String[] args) {
        BufferedReader in = null;
        BufferedWriter out = null;
        ServerSocket listener = null;
        Socket socket = null;
        Scanner scanner = new Scanner(System.in); // 키보드에서 읽을 scanner 객체 생성

        try {
            listener = new ServerSocket(9999);
            System.out.println("연결을 기다리고 있습니다...");
            socket = listener.accept();
            System.out.println("연결되었습니다.");
            in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            out = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
            while (true) {
                String inputMessage = in.readLine();
                if (inputMessage.equalsIgnoreCase("bye")){
                System.out.println("클라이언트에서 bye로 연결을 종료하였음");
                break;
            }

            System.out.println("클라이언트 : " + inputMessage);
            System.out.println("보내기>>");
            String outputMessage = scanner.nextLine();
            out.write(outputMessage + "/n");
            out.flush();
        }

    } catch (IOException e) {
            System.out.println(e.getMessage());
        } finally {
            try {
                scanner.close(); // scanner 닫기
                socket.close(); // 통신용 소켓 닫기
                listener.close(); // 서버 소켓 닫기
            } catch (IOException e) {
                System.out.println("클라이언트와 채팅 중 오류가 발생하였습니다.");
            }
        }
    }
}
import java.io.*;
import java.net.*;
import java.util.*;

public class ClientEx {
	public static void main(String[] args) {
		BufferedReader in = null;
		BufferedWriter out = null;
		Socket socket = null;
		Scanner scanner = new Scanner(System.in); // Ű키보드에서 읽을 scanner 객체 생성
		try {
			socket = new Socket("localhost", 9999); // Ŭ클라이언트 소캣 생성, 서버에 연결
			in = new BufferedReader(new InputStreamReader(socket.getInputStream())); // 소켓 입력 스트림
			out = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); // 소켓 출력 스트림
			while (true) {
				System.out.print("보내기>>"); // 프롬포트
				String outputMessage = scanner.nextLine(); // Ű키보드에서 한 행 읽기
				if (outputMessage.equalsIgnoreCase("bye")) { 
					out.write(outputMessage+"\n"); // "bye" 문자열 전송
					out.flush();
					break; // 사용자가 "bye"를 입력한 경우 서버로 전송 후 실행 종료
				}
				out.write(outputMessage + "\n"); // Ű키보드에서 읽은 문자열 전송
				out.flush(); // out의 스트림 버퍼에 있는 모든 문자열 전송
				String inputMessage = in.readLine();  // 서버로부터 한행 수신
				System.out.println("서버 : " + inputMessage);  // 서버로부터 받은 메시지를 화면에 출력
			}
		} catch (IOException e) {
			System.out.println(e.getMessage());
		} finally {
			try {
				scanner.close();
				if(socket != null) socket.close(); // 크라이언트 소켓 닫기
			} catch (IOException e) {
				System.out.println("서버와 채팅 중 오류가 발생했습니다.");
			}
		}
	}
}
반응형