jhhan의 블로그

Java의 정석을 시작하자(7)(2/11) 본문

JAVA

Java의 정석을 시작하자(7)(2/11)

jhhan000 2020. 2. 14. 22:42

16장을 마지막으로 '자바의 정석:기초편'이 끝난다.

16장. 네트워킹

-네트워킹

  • 두 대 이상의 컴퓨터를 케이블로 연결하여 네트워크를 구성하는 것

-서버와 클라이언트

  • 서버 : 서비스를 제공하는 컴퓨터
    • 하드웨어 사양에 관계없이 서비스를 제공하는 소프트웨어가 실행되는 컴퓨터
    • 서비스를 제공하기 위한 서버 프로그램 필요
    • ex) 파일 서버, 메일 서버, 어플리케이션 서버 등
  • 클라이언트 : 서비스를 사용하는 컴퓨터
    • 서버 프로그램과 연결할 수 있는 클라이언트 프로그램 필요
    • ex) 웹브라우저, FTP클라이언트 프로그램 등
서버기반 모델 P2P 모델
1. 안정적인 서비스 제공 가능
2. 공유 데이터의 관리와 보안 용이
3. 서버구축비용과 관리비용이 많이 든다.
1. 서버구축 및 운용비용 절감 가능
2. 자원의 활용 극대화 가능
3. 자원의 관리 어려움
4. 보안 취약

-IP주소

  • 컴퓨터를 구별하는 고유한 값
  • 네트워크주소와 호스트주소로 나뉜다.

-InetAddress클래스

  • IP주소를 다루기 위한 클래스
  • 그에 관련된 메서드 제공

  • 하나의 도메인명에 getAllByName()을 통해 모든 IP주소를 얻을 수 있다.
  • getLocalHost() : 호스트명과 IP주소를 알 수 있다.

-URL

  • 여러 서버들이 제공하는 자원에 접근할 수 있는 주소를 표현하기 위한 것
  • '프로토콜://호스트명:포트번호:/경로명/파일명?쿼리스트링#참조'의 형태
  • URL클래스 : URL을 다루기 위한 클래스

URL클래스 예제
출력 결과

  • URL클래스에 관련된 예제코드이다.
  • 그에 대한 출력 결과물이다.
  • getContent() 메서드의 경우 사용하면 에러가 나서 일단 주석처리를 해놨다.
  • 아마 저 파일이 실제로 없기 때문에 발생한 결과라고 생각한다.

-URLConnection클래스

  • 추상클래스
  • 어플레케이션과 URL간의 통신연결을 나타내는 클래스의 최상위 클래스
  • 이 클래스를 상속받는 클래스 : HttpURLConnection, JarURLConnection
  • 메서드가 좀 있는 편이다. (책 1장을 써서 보여줬다.)

  • URLConnection클래스와 관련된 예제와 출력결과물이다.
  • 여기서도 getContent() 에서 에러가 나기 때문에 주석 처리를 한 후의 결과물을 출력했다.
  • getHeaderFields()는 내용이 되게 길어서 여기에 다 캡쳐하지 못하고 짤린 부분이 있다.

  • URLConnection클래스에 대한 다른 예제이다.
  • 실행해보면 에러가 나타난다.
  • java.io.FileNotFoundException라는 예외가 발생되는데 ,  아마 실제로 존재하지 않는 파일이어서 발생하는 것 같다.
  • 실제로 존재하는 파일로 진행하면 될 것 같다.

-소켓프로그래밍

  • 소켓을 이용한 통신 프로그래밍
  • 소켓 : 프로세스 간의 통신에 사용되는 양쪽 끝단 의미
  • java.net패키지를 통해 지원
  • TCP 와 UDP를 이용

-TCP & UDP

  • TCP는 전화 ,  UDP는 소포에 비유된다.
항목 TCP UDP
연결방식 -연결기반
-1:1 통신방식
-비연결기반
-1:1, 1:n, n:n 통신방식
특징 -데이터의 경계 구분 안함
-신뢰성있는 데이터 전송
-UDP보다 느린 전송속도
-데이터의 경계 구분함
-신뢰성없는 데이터 전송
-TCP보다 빠른 전송속도
관련 클래스 -Socket
-ServerSocket
-DatagramSocket
-DatagramPacket
-MulticastSocket

 

-TCP소켓 프로그래밍

  1. 서버프로그램 실행
  2. 서버소켓 생성
  3. 서버소켓 대기상태 (이유 : 클라이언트 프로그램의 연결요청을 처리할 수 있게 하기 위해)
  4. 클라이언트 프로그램의 연결요청 -> 새로운 소켓 생성 -> 클라이언트 프로그램의 소켓과 연결
  5. 클라이언트 프로그램에서 소켓 생성 -> 서버소켓에 연결 요청
  6. 서버소켓은 클라이언트 프로그램의 연결요청 수락 -> 새로운 소켓 생성, 클라이언트 프로그램의 소켓과 연결

TCP IP 서버 예제
TCP IP 클라이언트
결과

  • 서버와 클라이언트의 간단한 코드 예제이다.
  • 서버와 클라이언트가 연결이 되었다면, [Notice] Test Message1이 와야 한다.
  • 하지만 아무리 시도해 봐도 그렇게 나오지는 않았다.
  • 다른 방법을 적용해야 하는 것인가...

 

-UDP 소켓 프로그래밍

  • DatagramSocket , DatagramPacket 사용
  • DatagramSocket : 헤더와 데이터로 구성
  • DatagramPacket : 수신할 호스트의 정보 저장

UDP 서버
UDP 클라이언트
UDP서버 진행 결과
UDP 클라이언트 진행 결과

  • UDP 소켓 프로그래밍의 예제이고, 서버시간을 전송받아 출력하는 예제이다.
  • 그리고 진행한 결과는 다음과 같다.
  • 클라이언트가 DatagramPacket을 생성해서 DatagramSocket으로 서버에 전송하면
  • 서버는 전송받은 DatagramPacket의 getAddress(), getPort()를 호출해서 클라이언트의 정보를 얻어 서버시간을 담는다.
  • 그리고 DatagramPacket에 담아서 전송한다.

 

TCP와 UDP의 소켓프로그래밍의 기본을 살폈다.

이렇게 사용된다는 것을 아는 것이 중요한 것 같다.

'JAVA' 카테고리의 다른 글

자바와 스프링 그 사이(1)  (0) 2020.12.16
BufferedReader & BufferedWriter  (0) 2020.06.18
Java의 정석을 시작하자(6)(2/10)  (0) 2020.02.14
Java의 정석을 시작하자(5)(2/8)  (0) 2020.02.14
Java의 정석을 시작하자(4)(2/7)  (0) 2020.02.14