오늘이라도

33. Networking ① 본문

취업성공패키지 SW 개발자 교육/Java

33. Networking ①

upcake_ 2020. 4. 2. 20:12
반응형

https://github.com/upcake/Class_Examples

교육 중에 작성한 예제들은 깃허브에 올려두고 있습니다. 


○ IP Address : 네트워크에 연결되어 있는 터미널(단말기)을 구분하기 위한 고유의 주소

 - CMD → ipconfig

 - IPv4 : 32bit 구성

 - IPv6 : 128bit 구성

 

○ Port Number : 네트워크에 연결되어 있는 터미널의 데이터가 전송되는 통로

 - CMD → netstat /an

 - 0 ~ 65535 할당

 - 0 ~ 1023 예약된 포트에서 사용할 수 없다.

 

○ Socket : IP Address + Port Number

 - Server Socket : Response(응답) ▶ ServerSocket, Socket

 - Client Socket : Request(요청) ▶ Socket

 - Socket 간의 통신은 JAVA의 IO를 이용해서 통신 (IO의 연장선)

 

○ TCP와 UDP

 - TCP : 신뢰성이 요구되는 애플리케이션에서 사용한다.

 - UDP : 간단한 데이터를 빠른 속도로 전송하는 애플리케이션에서 사용한다.

 

▲예제 1 - 1. 메시지 송수신 서버
▲예제 1 - 2. 메시지 송수신 클라이언트

① (Server) ServerSocket 생성하여 Port 번호를 할당하고 클라이언트의 정보가 들어있는 Socket을 생성한다.

 - ServerSocket ss = null;

 - Socket = null;

 - ss = new ServerSocket(9999);

 - socket = ss.accept();

 

② (Client) Socket을 생성한다.

 - socket = new Socket("IP Address", "Port Number");

 

③ (Client) 클라이언트에서 메시지를 송신(출력) 하기 위한 준비를 한다.

 - OutputStream os = socket.getOutputStream();

 - OutputStreamWriter osw = new OutputStreamWriter;

 - BufferedWriter bw = new BufferedWriter(osw);

 - PrintWriter pw = new PrintWriter(os); : 위의 두 스트림 기능을 동시에 담고 있어서 이것을 주로 사용한다.

 

④ (Client) 키보드에서 메시지를 받아 서버로 보낸다.

 - 스캐너 클래스 사용해서 메시지를 입력받는다.

 - pw.println(msg); ▶ println() 메서드를 사용해야 출력이 잘 된다.

 - pw.flush(); ▶ PrintWriter가 버퍼 기능을 겸하기 때문에 사용한다.

 

⑤ (Server) 클라이언트가 보낸 메시지를 수신(입력) 받기 위한 준비를 한다.

 - InputStream is = socket.getInputStream();

 - InpustStreamReader isr = new InputStreamReader(is);

 - BufferedReader br = new BufferedReader(isr);

 

⑥ (Server) 클라이언트의 접속 정보(IP 주소)를 가져온다.

 - InetAddress addr = socket.getInetAddress();

 - String ip = addr.getHostAddress();

 

⑦ (Server) 클라이언트가 보낸 메시지를 수신받아 화면에 출력한다.

 - String msg = br.readLine();

 - System.out.println(ip + "> " + msg);

 

⑧ (Server) 클라이언트에게서 받은 메시지를 송신(출력)하고 사용이 끝난 스트림을 닫아준다.

 - OutputStream os = socket.getOutputStream();

 - PrintWriter pw = new PrintWriter(os;

 - pw.println(msg);

 - pw.flush();

 - pw.close();

 

⑨ (Server) 소켓과 서버 소켓을 닫아준다.

 - socket.close();

 - ss.close();

 

⑩ (Client) 서버에서 보낸 메시지를 수신(입력) 받아 화면에 출력하고 사용이 끝난 스트림을 닫아준다.

 - InputStream is = socket.getInputStream();

 - InputStreamReader isr = new InputStreamReader(is);

 - BufferedReader br = new BufferedReader(isr);

 - String echoMsg = br.readLine();

 - System.out.println(echoMsg);

 - br.close();

 - pw.close()

 

⑪ (Client) 소켓을 닫아준다.

 - socket.close();

 

 

▲문제 1 - 1. 계산기 송수신 서버
▲문제 1 - 2.  계산기 송수신 클라이언트
▲문제 1 - 3. 계산기 송수신 DTO 
▲문제 1 - 4. 계산기 송수신 DAO

① (Server) ServerSocket, Socket 생성

② (Client) Socket 생성

③ (Client) 사용자로부터 정수, 연산자 입력받고 dto 객체에 입력

④ (Client) 생성된 객체 DTO를 서버로 전송(출력)

⑤ (Server) 클라이언트에서 전송한 객체 DTO를 수신(입력)

⑥ (Server) 수신받은 DTO 객체의 멤버 변수를 이용하여 사칙 연산을 수행하고 DTO 객체에 담는 메서드 getResultDTO()를 호출

⑦ (Server) 결과를 서버 측 화면에 출력

⑧ (Server) 결과 값을 담은 DTO 객체를 클라이언트에게 송신(출력)

⑨ (Client) 서버에서 전달된 결괏값을 수신(입력) 받아 출력

 

 

▲ 계산기 송수신 서버 답안
▲계산기 송수신 클라이언트 답안

① (Server) ServerSocket, Socket 생성

② (Client) Socket 생성

③ (Client) 정수 두 개와 연산자를 입력받고 유효성 검사

④ (Client) CalcDTO 객체를 서버로 송신(출력)

⑤ (Server) 클라이언트에서 전송한 객체 DTO를 수신(입력)

⑥ (Server) 수신받은 DTO 객체의 멤버 변수를 이용하여 사칙 연산을 수행하는 메서드 호출

⑦ (Server) 결과를 서버 측 화면에 출력

⑧ (Client) 결과 값을 클라이언트에게 송신(출력)

⑨ 서버에서 전달된 결과 값을 수신(입력) 받아 출력

반응형

'취업성공패키지 SW 개발자 교육 > Java' 카테고리의 다른 글

35. 외부 API ①  (0) 2020.04.07
34. Networking ②  (0) 2020.04.03
32. IO ③  (0) 2020.04.01
31. IO ②  (0) 2020.03.31
30. IO (Input & Output) ①  (0) 2020.03.30