오늘이라도
33. Networking ① 본문
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 : 간단한 데이터를 빠른 속도로 전송하는 애플리케이션에서 사용한다.
① (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();
① (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 |