Java Basic: Network Programming

2 분 소요

네트워크 프로그래밍

네트워크상의 두대 이상의 컴퓨터끼리 서로 데이터를 주고 받는 프로그래밍

ip address 네트워크상의 특정 컴퓨터를 구별하기 위한 식별자를 말한다. 네트워크 통신을 하려면 통신할 대상 컴퓨터를 정해야 하는데 ip address를 갖고 정할 수 있다.

port 번호 하나의 컴퓨터에서 동시에 여러개의 네트워크 프로그램이 실행될 수 있다. 이때 특정 프로그램을 식별하기 위한 역할을 port번호로 구별한다.

그러니까 하나의 컴퓨터를 구별하기 위한 식별자는 ipAddress이고 그 컴퓨터에서 동시에 실행되는 프로그램을 식별하는 것은 port 번호이다.

데이터를 주고받는 방식

TCP 방식

데이터의 경계를 구분안함(byte - stream) 현실세계의 전화와 같은 개념으로 통신을 할 컴퓨터와 연결을 먼저 맺어 놓고 그 연결된 회선을 통해 메세지를 주고받는 방식

  • 신뢰성이 높다(장점)
  • 네트워크의 부담이 높다(단점) -> 파일 전송에 적합 Socket, ServerSocket

UDP 방식

데이터의 경계를 구분함(datagram) 현실세계의 편지와 같은 개념으로 통신을 할 컴퓨터와 연결을 맺지 않고 데이터를 무조건 보내는 방식

  • 신뢰성이 낮다(단점)
  • 네트워크 부담이 적다(장점) -> 게임, 동영상 데이터 전송에 적합 DatagramPacket, DatagramSocket

연결을 맺어놓은게 아니기 떄문에 데이터를 보낼때마다 목적지와 주소와 데이터가 합쳐진 패킷단위로 전송해야한다.


ip주소에 매칭되는 문자로 되어있는 것을 대신 사용 -> 도메인 네임

규모가 큰 서비스인 경우 위험에 대비하기 위하여 세컨드리 서버를 둘 수 있다. getAllByName(String host) 이 메소드를 이용하면 그 컴퓨터이름에 해당하는 모든 InetAddress 객체를 읽어올 수 있다.


URL :Uniform Resource Locator

인터넷상의 문서의 위치를 갖고 잇는 객체

스트림을 통해 인터넷 상의 문서의 내용을 수정할 수 있다.

네트워크를 통해 데이터를 수신할 떄에는 byte의 일정한 양의 배열로 수신한다.

이것을 다시 문자열로 만들기 위해서는 String(byte []data)의 생성자를 이용한다. 그러나 한글인 경우에는 한글이 깨지기 때문에

한글처리를 위해서는 다음의 생성자를 이요한다. String(byte[] bytes, String charsetName)

이때 한글을 위한 문자셋의 종류로는 euc-kr utf-8이 있다.

요즘은 utf-8을 더 많이 쓴다


Server 네트워크상에서 서비스를 제공하는 컴퓨터 혹은 프로그램

Client 네트워크상에서 서비스를 제공받는 컴퓨터 혹은 프로그램


TCP 소켓 프로그래밍

  • Socket:
    프로세스간의 통신을 담당하며, InputStream과 OutputStream을 가지고 있다.
    이 두 스트림을 통해 프로세스간의 통신(입출력)이 이루어진다.

  • ServerSocket:
    포트와 연결(bind)되어 외부의 연결요청을 기다리다 연결요청이 들어오면,
    Socket을 생성해서 소켓과 소켓간의 통신이 이루어지도록 한다.
    한 포트에 하나의 ServerSocket만 연결할 수 있다.
    (프로토콜이 다르면 같은 포트를 공유할 수 있다.)

기본 흐름

  1. 서버프로그램을 실행한다.

  2. 서버소켓을 생성한다. serverSocket = new ServerSocket(7777);//사용할 포트 넘버 7777

  3. 서버소켓이 클라이언트 프로그램의 연결요청을 처리할 수 있도록 대기상태로 만든다. 클라이언트 프로그램의 연결요청이 오면 새로운 소켓을 생성해서 클라이언트 프로그램의 소켓과 연결한다. Socket socket = serverSocket.accept();

  4. 클라이언트 프로그램에서 소켓을 생성하여 서버소켓에 연결을 요청한다. Socket socket = new Socket("192.168.10.100", 7777); //ip주소와 포트넘버담은 소켓

  5. 서버소켓은 클라이언트 프로그램의 연결요청을 받아 새로운 소켓을 생성하여 클라이언트 프로그램의 소켓과 연결한다. `Socket socket - serverSocket.accept();

1) TCP방식 상대방 컴퓨터와 연결을 먼저 맺은 후 그 연결된 회선을 통해 데이터를 주고받는 형식

2) UDP방식 상대방 컴퓨터와 연결을 먼저 맺지 않고 그냥 데이터를 막 보내는 ㅏ방식

그래서 데이터를 보낼때마다 목적지주소 그래서 패킷에 담아서 보낸다.