Java/basic

[JAVA] 네트워크

동누크 2022. 12. 26. 15:56

TCP/IP 프로토콜

  • TCP : Transmission Control Protocol
    - 두 시스템 간에 신뢰성 있는 데이터의 전송을 관장하는 프로토콜
  • IP : Internet Protocol
    - 패킷 교환 네트워크에서 호스트간 데이터를 주고 받는 것을 관장하는 프로토콜

cf. OSI 7계층 관련 글
cf. TCP vs UDP 관련 글
cf. IP주소, 포트 번호, URL 관련 글

자바의 URL 클래스

  • java.net 패키지에 포함

URL 객체 생성 방법

  1. 절대 경로로 URL 객체 생성
URL myGithub = new URL("https://github.com/ruthetum");
  1. 상대 경로로 URL 객체 생성
URL repo = new URL(myGithub, "speech-to-text-icampus");
// repo 객체가 담은 URL은 https://github.com/ruthetum/speech-to-text-icampus
  • 잘못된 주소의 URL을 입력할 경우 MalformedURLException 예외 발생

예제 : URL 주소에서 데이터(html) 읽기

public static void main(String[] args) {
        URL myGithub = null;
        try {
            myGithub = new URL("https://github.com/ruthetum");
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(myGithub.openStream()));

            String html;
            while ((html = bufferedReader.readLine()) != null) {  // 한 줄씩 읽기
                System.out.println(html);
            }
            bufferedReader.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

URLConnection 클래스

  • 주어진 원격지의 주소 URL에 네트워크 접속 후 데이터를 보내거나 받을 수 있도록 하는 기능
  • 단순히 url에 접속하는 것도 가능하지만 파라미터를 설정해서 값을 넣어줄 수도 있음
  • 자바로 크롤링을 할 경우 Jsoup 패키지를 참고하자
URL url = new URL("https://github.com/ruthetum");
URLConnection conn = url.openConnection();

서버에 데이터를 보내기 위한 단계

  • 자바 프로그램이 웹 서버에 데이터를 보내기 위해 필요한 단계
  1. URL 생성
  2. URL 객체에서 URLConnection 객체를 얻어옴
  3. setDoOutput() 메소드로 doOutput 필드를 true로 설정
  4. connect() 메소드로 연결 설정
  5. 연결에서 출력 스트림을 얻음
  6. 출력 스트림에서 데이터를 출력
  7. 출력 스트림을 close() 메소드로 닫음

소켓 프로그래밍

Socket(소켓)

  • 네트워크 상에서 수행되는 두 프로그램 간의 양방향 통신 링크의 끝 단을 의미
  • 소켓은 특정 포트 번호와 연결되어 있음
  • 자바에서 데이터 통신 시 소켓 사용
  • 서버 소켓, 클라이언트 소켓으로 구성

ServerSocket 클래스

  • 서버 소켓에 사용되는 클래스
  • java.net 패키지에 포함
  • 주요 생성자
  • 주요 메소드
  • 예제 코드
// 서버 소켓 생성
ServerSocket server = new ServerSocket(5000);
// 클라이언트 접속 대기
Socket socket = server.accept();
// 네트워크 입출력 스트림 생성
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
BufferedWriter out = new BufferedWriter((new OutputStreamWriter(socket.getOutputStream()));
// 클라이언트로부터 데이터 수신
String line = in.readline(); // 한 행 수신
// 클라이언트에게 데이터 전송
out.write("Hello, Client\n");
out.flush();
// 네트워크 접속 종료
socket.close();
// 서버 종료
server.close();
  • flush를 호출하면 스트림 속에 데이터를 남기지 않고 모두 전송

Socket 클래스

  • 클라이언트 소켓에 사용되는 클래스
  • java.net 패키지에 포함
  • 주요 생성자
  • 주요 메소드
  • 예제 코드
// 클라이언트 소켓 생성
Socket client = new Socket("128.12.1.1", 5000);
// 네트워크 입출력 스트림 생성
BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));
BufferedWriter out = new BufferedWriter((new OutputStreamWriter(client.getOutputStream()));
// 서버로 데이터 전송
out.write("hello\n");
out.flush;
// 접속 종료
client.close();

예제 : 채팅 프로그램 만들기

이미지 출처 : 명품 JAVA 프로그래밍 (황기태, 김효수 저)

'Java > basic' 카테고리의 다른 글

[JAVA] 입출력 스트림과 파일 입출력  (0) 2022.12.26
[JAVA] 제네릭과 컬렉션  (0) 2022.12.26
[JAVA] 상속  (0) 2022.12.26