JAVA - 16
카테고리: java
DateServer.java
클라이언트에게 날짜 및 시간 정보를 보내는 서버를 구현한 예제입니다. 다음은 프로그램의 동작과 관련된 설명입니다:
- 포트번호 9100의 서버 소켓(ServerSocket)을 생성합니다. 서버 소켓은 클라이언트의 연결 요청을 받아들일 준비를 합니다.
- while문을 사용하여 서버를 계속해서 실행하도록 합니다. 서버는 클라이언트의 연결 요청을 기다리며, 연결 요청이 오면 해당 클라이언트와 통신하기 위한 소켓(Socket)을 생성합니다.
- PrintWriter를 사용하여 소켓에 대한 출력 스트림을 연결합니다. 출력 스트림은 클라이언트에게 데이터를 전송하는 데 사용됩니다.
- 현재 날짜 및 시간 정보를 문자열로 변환하여 PrintWriter를 통해 클라이언트에게 전송합니다.
- 소켓을 닫아 클라이언트와의 연결을 종료합니다.
- 서버가 한 번의 요청에 응답한 후에는 프로그램이 종료됩니다.
이 코드는 기본적인 TCP/IP 소켓 통신을 사용하여 클라이언트와 서버 간의 데이터 교환을 구현합니다. 클라이언트는 서버에 연결 요청을 보내고, 서버는 해당 요청에 대해 날짜 및 시간 정보를 응답으로 보내줍니다.
DateClient.java
- “localhost”와 포트 번호 9100을 사용하여 서버에 연결하기 위해 Socket을 생성합니다.
- 소켓에 대한 입력 스트림을 생성합니다. 입력 스트림은 서버로부터 데이터를 받기 위해 사용됩니다.
- BufferedReader를 사용하여 한 줄씩 데이터를 읽습니다. readLine() 메서드를 통해 서버에서 보낸 데이터를 한 줄씩 읽어옵니다.
- 읽은 데이터를 출력합니다. System.out.println()을 사용하여 콘솔에 출력합니다.
- 프로그램을 종료하기 위해 System.exit(0)을 호출합니다. 이는 프로그램의 실행을 강제로 종료시키는 역할을 합니다. 이후에 있는 코드는 실행되지 않습니다.
- 소켓을 닫습니다. 클라이언트가 서버와의 연결을 끊기 위해 소켓을 닫습니다.
프로그램을 실행하면 클라이언트는 “localhost”와 포트 9100으로 서버에 연결을 시도합니다. 연결이 수립되면 서버에서 전송한 날짜 및 시간 데이터를 읽어와 콘솔에 출력하고, 프로그램이 종료됩니다.
출력결과 :

SimpleServer.java
- ServerSocket을 사용하여 포트 번호 5434에서 서버 소켓을 생성합니다. 이 소켓은 클라이언트의 접속을 받아들일 준비를 합니다.
- while문을 사용하여 서버를 계속해서 실행하도록 합니다. 서버는 클라이언트의 접속을 기다리며, 클라이언트가 접속하면 해당 클라이언트와 통신하기 위한 소켓(Socket)을 생성합니다.
- 접속한 클라이언트의 IP 주소를 가져옵니다.
- BufferedWriter와 PrintWriter를 사용하여 소켓에 대한 출력 스트림을 생성합니다. 출력 스트림은 클라이언트에게 데이터를 전송하는 데 사용됩니다.
- PrintWriter를 통해 클라이언트에게 접속 메시지를 전송합니다.
- PrintWriter와 소켓을 닫아 클라이언트와의 연결을 종료합니다.
- 서버는 다시 클라이언트의 접속을 기다리는 상태로 돌아가며, 이후 클라이언트가 접속할 때까지 이 과정을 반복합니다.
프로그램을 실행하면 서버는 포트 5434에서 클라이언트의 접속을 기다립니다. 클라이언트가 접속하면 클라이언트의 IP 주소와 접속 메시지를 출력합니다. 그 후에 소켓을 닫고, 다시 클라이언트의 접속을 기다리는 상태로 돌아갑니다.
SimpleClient.java
- ServerSocket을 사용하여 포트 번호 5434에서 서버 소켓을 생성합니다. 이 소켓은 클라이언트의 접속을 받아들일 준비를 합니다.
- while문을 사용하여 서버를 계속해서 실행하도록 합니다. 서버는 클라이언트의 접속을 기다리며, 클라이언트가 접속하면 해당 클라이언트와 통신하기 위한 소켓(Socket)을 생성합니다.
- 접속한 클라이언트의 IP 주소를 가져옵니다.
- BufferedWriter와 PrintWriter를 사용하여 소켓에 대한 출력 스트림을 생성합니다. 출력 스트림은 클라이언트에게 데이터를 전송하는 데 사용됩니다.
- PrintWriter를 통해 클라이언트에게 접속 메시지를 전송합니다.
- PrintWriter와 소켓을 닫아 클라이언트와의 연결을 종료합니다.
- 서버는 다시 클라이언트의 접속을 기다리는 상태로 돌아가며, 이후 클라이언트가 접속할 때까지 이 과정을 반복합니다.
출력결과 :

SimpleServer2.java
- FileWriter를 사용하여 “out.txt” 파일에 데이터를 입력하기 위한 writer를 생성합니다.
- ServerSocket을 사용하여 포트 번호 5435에서 서버 소켓을 생성합니다. 이 소켓은 클라이언트의 접속을 받아들일 준비를 합니다.
- accept() 메소드를 호출하여 클라이언트의 접속을 인지하면 해당 클라이언트와 통신하기 위한 소켓(Socket)을 생성합니다.
- 소켓에 대한 입력 스트림을 획득합니다. 클라이언트가 서버로 보낸 데이터를 읽기 위해 사용됩니다.
- BufferedReader와 InputStreamReader를 사용하여 입력 스트림을 문자 읽기에 최적화된 버퍼드 리더(BufferedReader)와 연결합니다.
- PrintWriter를 사용하여 FileWriter에 문자를 입력하기 위한 PrintWriter를 생성합니다. FileWriter와 PrintWriter를 연결하여 파일에 데이터를 쓰게 됩니다.
- while문을 사용하여 클라이언트로부터 받은 데이터를 한 줄씩 읽고, “out.txt” 파일에 입력합니다. 데이터가 없을 때까지 반복합니다.
- PrintWriter와 소켓을 닫아 클라이언트와의 연결을 종료합니다.
프로그램을 실행하면 서버는 포트 5435에서 클라이언트의 접속을 기다립니다. 클라이언트가 접속하면 클라이언트가 보낸 데이터를 읽어서 “out.txt” 파일에 저장합니다. 그 후에 소켓을 닫고, 서버는 다시 클라이언트의 접속을 기다리는 상태로 돌아갑니다.
SimpleClient2.java
- 파일에서 데이터를 읽어올 변수인 data를 선언합니다.
- “localhost”와 포트 번호 5435로 소켓(Socket)을 생성하여 서버에 연결합니다.
- 소켓에 대한 출력 스트림을 획득합니다. 서버로 데이터를 보내기 위해 사용됩니다.
- FileReader를 사용하여 “write.txt” 파일에 연결하여 데이터를 읽어올 BufferedReader(br_out)를 생성합니다.
- 출력 스트림에 문자를 입력하기 위해 BufferedWriter와 OutputStreamWriter를 연결하여 성능을 향상시킨 BufferedWriter(bw)를 생성합니다.
- BufferedWriter와 PrintWriter를 연결하여 PrintWriter(pw)를 생성합니다. PrintWriter를 사용하여 버퍼에 담긴 문자열을 출력 스트림으로 전송합니다.
- while문을 사용하여 “write.txt” 파일에서 한 줄씩 데이터를 읽어와 data에 저장하고, data를 서버로 전송합니다. 데이터가 없을 때까지 반복합니다.
- “파일을 전송했습니다.”라는 메시지를 출력합니다.
- PrintWriter와 소켓을 닫아 클라이언트의 연결을 종료합니다.
프로그램을 실행하면 클라이언트는 “write.txt” 파일에서 데이터를 읽어와 서버로 전송합니다. 전송이 완료되면 “파일을 전송했습니다.”라는 메시지가 출력되고 클라이언트의 연결이 종료됩니다.
댓글 남기기