JAVA - 16

Date:     Updated:

카테고리:

태그:

img

DateServer.java

클라이언트에게 날짜 및 시간 정보를 보내는 서버를 구현한 예제입니다. 다음은 프로그램의 동작과 관련된 설명입니다:

  1. 포트번호 9100의 서버 소켓(ServerSocket)을 생성합니다. 서버 소켓은 클라이언트의 연결 요청을 받아들일 준비를 합니다.
  2. while문을 사용하여 서버를 계속해서 실행하도록 합니다. 서버는 클라이언트의 연결 요청을 기다리며, 연결 요청이 오면 해당 클라이언트와 통신하기 위한 소켓(Socket)을 생성합니다.
  3. PrintWriter를 사용하여 소켓에 대한 출력 스트림을 연결합니다. 출력 스트림은 클라이언트에게 데이터를 전송하는 데 사용됩니다.
  4. 현재 날짜 및 시간 정보를 문자열로 변환하여 PrintWriter를 통해 클라이언트에게 전송합니다.
  5. 소켓을 닫아 클라이언트와의 연결을 종료합니다.
  6. 서버가 한 번의 요청에 응답한 후에는 프로그램이 종료됩니다.

이 코드는 기본적인 TCP/IP 소켓 통신을 사용하여 클라이언트와 서버 간의 데이터 교환을 구현합니다. 클라이언트는 서버에 연결 요청을 보내고, 서버는 해당 요청에 대해 날짜 및 시간 정보를 응답으로 보내줍니다.

DateClient.java

  1. “localhost”와 포트 번호 9100을 사용하여 서버에 연결하기 위해 Socket을 생성합니다.
  2. 소켓에 대한 입력 스트림을 생성합니다. 입력 스트림은 서버로부터 데이터를 받기 위해 사용됩니다.
  3. BufferedReader를 사용하여 한 줄씩 데이터를 읽습니다. readLine() 메서드를 통해 서버에서 보낸 데이터를 한 줄씩 읽어옵니다.
  4. 읽은 데이터를 출력합니다. System.out.println()을 사용하여 콘솔에 출력합니다.
  5. 프로그램을 종료하기 위해 System.exit(0)을 호출합니다. 이는 프로그램의 실행을 강제로 종료시키는 역할을 합니다. 이후에 있는 코드는 실행되지 않습니다.
  6. 소켓을 닫습니다. 클라이언트가 서버와의 연결을 끊기 위해 소켓을 닫습니다.

프로그램을 실행하면 클라이언트는 “localhost”와 포트 9100으로 서버에 연결을 시도합니다. 연결이 수립되면 서버에서 전송한 날짜 및 시간 데이터를 읽어와 콘솔에 출력하고, 프로그램이 종료됩니다.

출력결과 :

Image description

SimpleServer.java

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

프로그램을 실행하면 서버는 포트 5434에서 클라이언트의 접속을 기다립니다. 클라이언트가 접속하면 클라이언트의 IP 주소와 접속 메시지를 출력합니다. 그 후에 소켓을 닫고, 다시 클라이언트의 접속을 기다리는 상태로 돌아갑니다.

SimpleClient.java

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

출력결과 :

Image description

SimpleServer2.java

  1. FileWriter를 사용하여 “out.txt” 파일에 데이터를 입력하기 위한 writer를 생성합니다.
  2. ServerSocket을 사용하여 포트 번호 5435에서 서버 소켓을 생성합니다. 이 소켓은 클라이언트의 접속을 받아들일 준비를 합니다.
  3. accept() 메소드를 호출하여 클라이언트의 접속을 인지하면 해당 클라이언트와 통신하기 위한 소켓(Socket)을 생성합니다.
  4. 소켓에 대한 입력 스트림을 획득합니다. 클라이언트가 서버로 보낸 데이터를 읽기 위해 사용됩니다.
  5. BufferedReader와 InputStreamReader를 사용하여 입력 스트림을 문자 읽기에 최적화된 버퍼드 리더(BufferedReader)와 연결합니다.
  6. PrintWriter를 사용하여 FileWriter에 문자를 입력하기 위한 PrintWriter를 생성합니다. FileWriter와 PrintWriter를 연결하여 파일에 데이터를 쓰게 됩니다.
  7. while문을 사용하여 클라이언트로부터 받은 데이터를 한 줄씩 읽고, “out.txt” 파일에 입력합니다. 데이터가 없을 때까지 반복합니다.
  8. PrintWriter와 소켓을 닫아 클라이언트와의 연결을 종료합니다.

프로그램을 실행하면 서버는 포트 5435에서 클라이언트의 접속을 기다립니다. 클라이언트가 접속하면 클라이언트가 보낸 데이터를 읽어서 “out.txt” 파일에 저장합니다. 그 후에 소켓을 닫고, 서버는 다시 클라이언트의 접속을 기다리는 상태로 돌아갑니다.

SimpleClient2.java

  1. 파일에서 데이터를 읽어올 변수인 data를 선언합니다.
  2. “localhost”와 포트 번호 5435로 소켓(Socket)을 생성하여 서버에 연결합니다.
  3. 소켓에 대한 출력 스트림을 획득합니다. 서버로 데이터를 보내기 위해 사용됩니다.
  4. FileReader를 사용하여 “write.txt” 파일에 연결하여 데이터를 읽어올 BufferedReader(br_out)를 생성합니다.
  5. 출력 스트림에 문자를 입력하기 위해 BufferedWriter와 OutputStreamWriter를 연결하여 성능을 향상시킨 BufferedWriter(bw)를 생성합니다.
  6. BufferedWriter와 PrintWriter를 연결하여 PrintWriter(pw)를 생성합니다. PrintWriter를 사용하여 버퍼에 담긴 문자열을 출력 스트림으로 전송합니다.
  7. while문을 사용하여 “write.txt” 파일에서 한 줄씩 데이터를 읽어와 data에 저장하고, data를 서버로 전송합니다. 데이터가 없을 때까지 반복합니다.
  8. “파일을 전송했습니다.”라는 메시지를 출력합니다.
  9. PrintWriter와 소켓을 닫아 클라이언트의 연결을 종료합니다.

프로그램을 실행하면 클라이언트는 “write.txt” 파일에서 데이터를 읽어와 서버로 전송합니다. 전송이 완료되면 “파일을 전송했습니다.”라는 메시지가 출력되고 클라이언트의 연결이 종료됩니다.


java 카테고리 내 다른 글 보러가기

댓글 남기기