NOW OR NEVER

[JAVA] Network Programming 본문

Back-End/JAVA

[JAVA] Network Programming

LAURA 2022. 4. 14. 18:35
반응형

Dialog 클래스

  • JColorChooser 클래스 : 좀 더 다양한 색상을 선택하도록 하는 다이얼로그
    • showDialog 메소드 : 선택하도록 다이얼로그 띄워줌 --> Color 자료형 값 반환
    • getColor 메소드: 색상을 가져오도록 해줌
  • JFileChooser 클래스: 저장하고 열기를 할 때 파일을 선택하기 위한 다이얼로그
  • ObjectInputStream, ObjectOutputStream : 객체 단위로 읽고 출력하는 클래스 ex) 리스트를 통째로 파일로 내보낼 수 있다.
    • ObjectInputStream : InputStrea의 후손이며 객체 단위로 입력을 위한 클래스
    • ObjectOutputStream : OutputStream의 후손이며 객체 단위 출력을 위한 클래스
    • 객체 단위로 출력한 클래스는 객체 단위로 읽어야 한다.
  • 객체 단위로 출력하기 위한 클래스는 직렬화 되어 있어야 한다.
    • 해당 클래스에 implements Serializable 키워드 추가

네트워크 프로그래밍

java.net

  • 네트워크 프로그래밍과 관련된 클래스들을 모아놓은 패키지
  • 클래스
  • InetAddress : 인터넷 상의 주소를 표현하기 위한 클래스
    • InetAddress는 생성자가 제공되지 않으며 static 메소드를 통하여 객체 생성함
      • 생성자 없음
      • 메소드들을 통해서 InetAddress 객체 반환
    • InetAddress.getByName("인터넷주소") : 해당 인터넷 주소의 ip주소 가져옴, 예외처리 필수
    • InetAddress.getAllByName("인터넷주소");: InetAddress의 배열 받아오기, 예외 처리 필수
  • URL
    • 인터넷 상의 문서의 위치를 표현하기 위한 클래스
    • 예외 처리 필수
    • URL url = new URL("인터넷 주소") : 인터넷 상의 문서 객체 생성
    • InputStream 이름 = URL객체이름.openStream : 그 문서의 내용을 읽어들이기 위한 스트림 생성
      • InputStream객체.read : 스트림을 통해 데이터 읽어들임통신 프로그램
  • 네트워크 상에서 두 대의 컴퓨터가 서로 데이터를 주고 받는 프로그램을 말한다.
  • 통신 관련 기본 용어
    • ip 주소 : 인터넷 상의 수 많은 컴퓨터들 중 특정 컴퓨터를 구별하기 위한 식별자, 서로 간의 데이터를 주고 받기 위해서는 ip가 필요하다.
    • port 번호 : 하나의 컴퓨터에서 동시에 여러 개의 네트워크 프로그램이 실행 할 수 있다. 이때 특정 프로그램을 구별하기 위한 식별자
    • 서버 server : 서비스를 제공하는 컴퓨터 혹은 프로그램
    • 클라이언트 client: 서비스를 제공받는 컴퓨터 혹은 프로그램
    • 메아리 : 수신한 데이터를 그대로 데이터를 보낸 쪽으로 내보내는 것을 말한다.
    • 방송 : 수신한 데이터를 연결된 모든 컴퓨터에게 내보내는 것을 말한다.TCP 방식
    • 통신 방식
    • 통신하고자 하는 컴퓨터와 연결을 먼저 맺은 후 상대방 컴퓨터가 데이터를 받을 준비가 되어있는 지 확인 한 후 데이터를 주고 받은 방식
    • 현실에서의 전화와 비슷한 개념
  • 클래스
    • ServerSocket
      • 생성자 ServerSocket 객체이름 = new ServerSocket(port 번호);
      • 메소드
        • accept() : 클라이언트의 접속을 수락하여 자료형이 Socket인 값(Socket 객체)을 반환
    • Socket : 통신을 요청할 때 사용
      • 생성자: Socket 객체이름 = new Socket("ip주소",port 번호);
  • 해당 방식의 네트워크 프로그래밍 절차
    • 1.서버가 serverSocket 생성
      • ServerSocket에서 정한 port 번호로 연결을 시도해야 한다.
    • 2.서버가 클라이언트가 접속할 때 까지 무한 대기 상태
    • 3.클라이언트 측에서 Socket 객체를 생성하여 통신 요청
    • 4.서버 측에서 클라이언트에서 보낸 통신 요청을 수락한다.
    • 5.서버 및 클라이언트 측에서 데이터를 주고 받을 스트림을 생성한다.
      • InputStream 객체이름 = socket객체.getInputStream();
      • OutputStream 객체이름 = socket객체.getOutputStream();
    • 6.서버와 클라이언트 서로 데이터를 주고 받는다
    • 7.서버와 클라이언트 둘 다 사용했던 자원을 닫아 준다.UDP 방식
  • 통신하고자 하는 컴퓨터와 연결을 맺지 않고 상대방 컴퓨터가 데이터를 받을 준비가 되어 있는지 확인 없이 데이터를 전달하는 방식
  • 현실에서의 편지와 비슷한 개념
  • 클래스
    • DatagramSocket
      • 객체 생성시 통신을 하기 위한 port 번호 필요, 예외 처리 해주기
      • 메소드
        • receive(DatagramPacket 객체)
        • sender(DatagramPacket 객체)
    • DatagramPacket
      • 생성시 데이터가 들어 있는 배열, 데이터 길이, 목적지의 주소, 포트 번호 포함해야 함
      • 데이터를 주고 받을 때 준비해야 한다.
  • 해당 방식의 네트워크 프로그래밍 절차
    • TCP 방식과 달리 순서가 없다.
    • 상대방이 데이터를 갖고 있나 확인하지 않고 데이터를 내보낸다.
    • 연결이 되어 있지 않아 packet(데이터 뿐만 아니라 목적지의 주소까지 같이 있는 형태) 단위로 보내고 받는다.
    • UDPSender ip 주소 포트번호 데이터
    • UDPReciever : UDPSender가 보낸 데이터 출력

Tips

  • 바이트
    • read 메소드 : 읽어들인 byte 수 반환, 더이상 읽어들이는 게 없으면 -1 반환
    • write 메소드 : 값 내보내기
  • String
    • 생성자(바이트배열, 인코딩방식) ex) new String(data,"utf-8")
  • Arrays
    • Arrays.fill(배열, 채울 값) :배열을 해당 값으로 채워주기
      • 배열 비워주기: Arrays.fill(배열,0) --> 바이트 배열일 경우 0이 아니라 (byte)0
  • GUI
    • 클라이언트 측만 필요
    • JFrame 클래스
      • JFileChooser : 저장 위한 클래스
        • JFileChooser.APPROVE_OPTION : 다이얼로그에서 예 에 해당하는 값
        • jfc객체.showSaveDialog() : 저장옵션 보여주는 다이얼로그
        • jfc객체.getSelectedFile() : 해당 파일로 저장
      • JTextField : 한 줄 입력
        • jtf객체.getText() : 텍스트 필드에 있는 텍스트 가져오기
          • JTextArea : 여러 줄 입력
        • jta객체.setText() : 해당 문자열을 텍스트 에리어에 설정
      • JButton : 버튼 생성
      • JScrollPane : 스크롤 생성
        • JScrollPane jsp = new JScrollPane(스크롤 생성할 영역의 변수이름);

'Back-End > JAVA' 카테고리의 다른 글

[Spring] 스프링 MVC 기초  (0) 2022.05.27
[JAVA] JDBC(Java DataBase Connection Programming)  (0) 2022.04.15
[JAVA] Thread  (0) 2022.04.13
[JAVA] GUI(Graphical User Interface)  (0) 2022.04.12
[JAVA] 예외 처리 & Collection  (0) 2022.04.08
Comments