본문 바로가기
Java

Java_네트워크, I/O

by 유서담 2023. 11. 29.

네트워크

  • 여러 대의 컴퓨터가 통신회선을 연결되어 있는 것

 

네트워크의 구성

 

  • 서버 : 서비스를 제공하는 프로그램
  • 클라이언트 : 서비스를 제공받는 프로그램

 

 

네트워크의 주요 용어

 

 

host

  • 네트워크에 연결되어 있고, 다른 호스트와 통신할 수 있는 컴퓨터
  • ip주소로 식별된다.

 

ip address

  • 네트워크에서 호스트를 식별하기 위해서 부여되는 고유한 주소
  • IPv4, IPv6 주소 체계가 있다.

 

port

  • 실행 중인 서버프로그램의 논리적인 연결지점
  • 모든 서버프로그램은 특정 포트번호를 가지고 실행된다.
  • 포트번호를 이용해서 서비스를 제공하는 서버프로그램을 선택할 수 있게 된다.
  • 포트갯수는 0 ~ 65535까지 총 65536개 있다.

 

포트번호의 범위

  • 0 ~ 1023 : 국제인터넷주소관리기구에서 특정 서버용으로 미리 예약한 포트
  • 1024 ~ 49151 : 특정 벤더(회사)사가 등록해서 사용할 수 있는 포트
  • 49152 ~ 65535 : 개인적인 목적으로 사용할 수 있는 포트 번호

 

대표적인 포트 번호

  • 웹서버의 포트번호 : 80번
  • FTP서버의 포트번호 : 21번
  • 텔넷의 포트번호 : 23번
  • SSH의 포트번호 : 22번
  • https의 포트번호 : 443

 

서버접속시 주소표기법

 

 

protocol

 

  • 네트워크에 연결된 host간의 데이터 교환을 위해서 미리 약속된 통신규약이다.
  • 물리적 혹은 논리적 통신을 처리하기 위한 규칙 세트다.
  • tcp, ip, http, https, ftp, telnet, smtp, ...

 

IP(Internet Protocol) : ip주소 체계를 규정하는 프로토콜

 

 

IPv4

  • 32비트로 구성된다.
  • 총 2^32개 만큼의 주소를 가진다.
  • 클래스
    • 클래스 A 주소 : xxx.???.???.??? - 1.???.???.??? ~ 126.???.???.???
    • 클래스 B 주소 : xxx.xxx.???.??? - 128.xxx.???.??? ~ 191.xxx.???.???
    • 클래스 C 주소 : xxx.xxx.xxx.??? - 192.xxx.xxx.??? ~ 223.xxx.xxx.???
  • 구분
    • 공인 ip주소 : 다른 컴퓨터와 통신할 때 사용하는 ip주소
    • 사설 ip주소 : 가상ip, 사설망내에서 사용할 수 있는 ip주소
      • 10.0.0.0 ~ 10.255.255.255
      • 172.16.0.0 ~ 172.31.255.255
      • 192.168.0.0 ~ 192.168.255.255
    • 특수목적 ip주소
      • 루프백(loopback) ip, 자기자신을 나타내는 ip주소
        • 127.0.0.1
  • 서브넷마스크
    • ip주소를 내부 ip주소인지 외부 ip주소인지 구분할 때 사용
    • ip주소와 서브넷마스크주소를 논리곱연산을 수행해서 같은 주소가 나오면 내부ip 다른 주소가 나오면 외부ip로 판단한다.
    • ip대역을 더 작은 단위로 나눌 수 있다.
    • 라우터의 브로드캐스팅 부담을 줄일 수 있다.

 

IPv6

  • 128비트로 구성된다.
  • ip주소 고갈문제, 인터넷 확장성, 데이터 보안의 강화를 위해서 정의
  • ip주소 갯수 : 2^128개 (340,282,366,920,938,463,463,374,607,431,768,211,456개)
  • 주소 표기법
    • 16비트씩 16진수로 표기
    • 2001:0d5f:451d:0010:38da:6b43:191c:1d1d

 

DNS(Domain Name Server)

  • 웹사이트의 도메인이름과 ip주소를 서로 변환하는 역할을 수행하는 서버다.
  • 도메인이름에 해당하는 ip주소정보를 조회할 수 있다.

 

Gateway(게이트웨이)

  • 서로 다른 네트워크로 이동하기 위한 통로다.
  • 내부네트워크가 아닌 외부네트워크와 통신하는 경우 반드시 게이트웨이를 거쳐야 한다.

 

TCP/IP

  • TCP(Transmission Control Protocol)과 IP(Internet Protocol)를 말한다.
    • 인터넷 통신에 가장 기반이 되는 프로토콜
  • TCP : 컴퓨터가 다른 컴퓨터와 데이터 통신을 하기위한 표준을 정의하는 프로토콜
  • IP : 호스트를 식별하기 위한 ip주소체계를 정의하는 프로토콜

 

 

네트워크 프로그래밍 순서

 

서버 클라이언트
서버실행  
클라이언트의 연결요청 기다리기   
  서버에 연결요청
클라이언트의 연결요청 수락  
클라이언트와 연결된 스트림 획득 서버와 연결된 스트림연결
클라이어느 요청처리 메세지 수신대기  
  서버에 요청처리 메세지 보내기
클라이언트가 서버로 보내 요청처리 메세지 읽기 서버의 응답메세지 수신대기
클라이언트의 요청처리를 위한 업무로직 수행  
클라이언트에게 응답메세지 보내기  
  서버가 보낸 응답메세지 읽기
  서버가 보낸 응답메세지를 처리해서 출력하기

 

 

 

I/O

  • 자바 애플리케이션에서 특정 리소스(자원)에서 데이터를 읽어오거나 데이터를 내보내는 것
  • 자바는 스트림을 사용해서 읽기/쓰기 작업을 수행한다.

 

스트림의 종류

스트림 이름 수행 내용
InputStream, Reader 특정 리소스로부터 데이터를 읽어온다.
OutputStream, Writer 특정 리소스로 데이터를 내보낸다. ###대표 스트림
FileInputStream, FileOutputStream, FileReader, FileWriter 파일의 내용을 읽고, 쓰기 할때 사용되는 스트림
BufferedReader readLine() 메소드 제공
텍스트를 한 줄씩 읽을 수 있는 스트림
PrintWriter, PrintStream print(), println(), write(bytes, int, int) 메소드 제공
텍스트에 줄바꿈문자를 추가해서 쓰기할 수 있는 스트림
DataInputStream, DataOutputStream readInt(), readLong(), readDouble(), readUTF(), read()
writeInt(int), writeLong(long), writeDouble(double), writeUTF(string), write(bytes, int, int)
특정 타입의 데이터를 원하는 순서대로 내보내고, 순서대로 읽어올 수 있다.
ObjectInputStream, ObjectOutputStream readObject(), writeObject(object)
writeObject(obj)는 객체를 조각내서 스트림으로 내보낸다.
readObject() 스트림으로 읽어온 객체 조각으로 원래 객체를 복원한다.
직렬화가능한 객체(java.io.Serializable를 구현한 객체)만 읽고 쓸 수 있다.
InputStreamReader, OutputStreamWriter 브릿지스트림
바이트스트림을 문자스트림으로 변환한다.
InputStream -- Reader, OutputStream -- Writer로 변환

 

 

읽고 / 쓰기 

 

 

읽기

  // 획득된 스트림(InputStream, Reader)
  FileInputStream inputStream = new FileInputStream("sample.txt");
  FileReader reader = new FileReader("sample.txt");
  // 획득된 스트림을 BufferedReader로 변환
  BufferedReader br = new BufferedReader(new InputStreamReader(is));
  BufferedReader br = new BufferedReader(reader);
  // 한 줄씩 읽어서 처리
  String text = null;
  while((text = br.readLine()) != null) {
    // text에 내용이 한 줄씩 담겨있다.
    // text를 구분문자로 잘라서 사용한다.
  }
  br.close();

 

쓰기 

  // 읽어오는 스트림 획득
  BufferedInputStream in = new BufferedInputStream(new FileInputStream("sample.png"));
  BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream("sample_backup.png"));
  // 읽어서 다른 곳으로 보내기(항상 똑같은 코드)
  int value = 0;
  while ((value = in.read()) != -1) {
    out.write(value);
  }

 

 

 

네트워크 

 

  • 호스트와 호스트간의 데이터 통신
  • 서버와 클라이언트간의 데이터 통신을 말한다.
  • 자바에서는 Socket객체끼리 데이터를 교환한다.
  • Socket의 주요 메소드 InputStream getInputStream() 연결된 다른 소켓이 보낸 데이터를 읽어오는 스트림을 반환한다. OutputStream getOutputStream() 연결된 다른 소켓으로 데이터를 보내는 스트림을 반환한다. void close() 연결을 해제한다.

 

자바에서의 네트워킹

 

  • 다른 컴퓨터로 텍스트 데이터 보내기 // 쓰기 스트림 획득 OutputStream out = socket.getOutputStream(); 
  • // 텍스트 보내기 PrintWriter pw = new PrintWriter(out); pw.println("내용.....");
  • 다른 컴퓨터로 (파일, 영상, 바이너리 데이터) 보내기 // 쓰기 스트림 획득 OutputStream out = socket.getOutputStream (); // 읽기 스트림 획득. xxxInputStream in = new xxxInputStream(); // 데이터보내기 IOUtils.copy(in, out);
  • 다른 컴퓨터가 보낸 텍스트 데이터 읽기 // 읽기 스트림 획득 InputStream in = socket.getInputStream();                         텍스트 읽기 // BufferedReader br = new BufferedReader(new InputStreamReader(in)); String text = in.readLine();
  • 다른 컴퓨터가 보낸 (파일, 영상, 바이너리 데이터 읽기) // 읽기 스트림 획득 InputStream in = socket.getInputStream(); 쓰기 스트림 획득 // FileOutputStream fos = new FileOutputStream("파일명"); // 데이터 보내기 IOUtils.copy(in,fos);

 

 

I/O 예시

 

클라이언트가 서버로 메세지 보내는 코드

 

 

서버 예시

 

 

 

'Java' 카테고리의 다른 글

Java_익명 내부 클래스, 람다식  (0) 2024.02.26
Java_스레드와 동기화  (1) 2023.12.04
Java_I/O(입출력)  (1) 2023.11.27
Java_객체의 직렬화와 역직렬화  (1) 2023.11.26
Java_예외처리  (0) 2023.11.22