[Java]네트워킹(Networking) : java.net

1. 네트워킹(Networking)

1.1 클라이언트/서버(client/sever)

서버란?

  • 서버 프로그램은 IP가 고정이다.
  • 클라이언트에서 연결할 때 연결번호가 필요한데, 이를 PORT라고 한다.
  • PORT는 0 ~ 65535의 숫자를 사용한다. (1 ~ 1023은 이용중인 포트)
  • (예)
클라이언트 포트
HTTP 80
SMTP 25
FTP 21
TELNET 23
Spring 8080
React 3000
오라클 1521
MS-SQL 1433
머드 4000
음성 20000
화상 30000

서버에서 하는 역할

  1. 사용자 요청받기
  2. 요청 처리하기
  3. 결과값을 사용자에게 전송

서버 종류

  1. 서버와 클라이언트가 1:1(Peer to Peer)통신
  2. 서버 하나에 여러 클라이언트가 들어가는 1:다 통신
    • 데이터가 동일해야함
    • 사용자에 따라 요청을 할 수 있게 만든다.
    • 사용자의 요청을 받아서 처리하는 프로그램이 여러개가 존재해야함
    • 통신하는 프로그램이 별도로 수행하게 만들어야함(쓰레드)

서버와 클라이언트

  1. 서버 가동 :
    socket()
    ServerSocket ss = null;(Socket=발신자정보, IP와 PORT정보 저장되어 있음)
    ss= new ServerSocket(번호);실행하면 bind(ip,port) + listen() 도 실행됨

  2. IP+PORT의 결합(개통) :
    bind()

  3. 대기상태 : listen()

  4. 접속대기 : accept()
    • 접속됐을때만 accept()호출됨 (발신자 IP 생성됨)
    • while문 안에 있어도 접속 안되어있으면 루프안돌아감
    • 무전기에서 채널 안맞으면 작동 안되듯이, 접속되야만 실행되는 특수한 메소드
  5. 저장 : 동기화프로그램
    • Arraylist : 들어오는대로 저장, 비동기화
    • Vector : 동기화
  6. 통신 : write(), read() 서버와 클라이언트는 교차로 번갈아서 수행됨
    • 데이터 전송 : write()메소드 활용
    • 데이터 수신 : readLine()으로 사용자 요청값을 읽기

일반 서버와 웹서버

  • 일반서버(Application) : Socket을 이용(연결기계 => 소프트웨어로 제작)
  • 웹서버 : URL을 이용

서버와 쓰레드

  • 서버는 접속만 담당하고, 클라이언트는 실제 통신을 담당한다.
  • 이때 서버는 클라이언트마다 따로 통신하기 때문에 쓰레드를 이용한다.

1.2 IP주소(IP address)

1.3 InetAddress

1.4 URL(Uniform Resource Location)

1.5 URLConnection

2. 소켓 프로그래밍

  • ServerSocket
    • 전화기
    • 서버 연결할 때 쓰는 것
  • Socket
  • 클라이언트 연결할 때 쓰는 것

2.1 TCP와 UDP

내부 프로토콜

서버와 클라이언트가 데이터를 주고받는 약속

  • 컴퓨터, ip폰 등 한 클라이언트에서 발생한 데이터가 상대방 컴퓨터 혹은 서버로 전달되기 위해서는 표준화 된 어떠한 약속 혹은 절차를 따라야한다. 전기 신호가 그냥 케이블을 타고 상대방 컴퓨터로 전달되는 것이 아니다.

  • 보내는 쪽에서는 데이터를 안전하고, 정확하고, 신속하게 규격화 즉 포장하는 방법이 필요하고, 받는 쪽에서는 그 데이터를 안전하고 정확하고 신속하게 해석하는 방법이 필요한 것이다. 그런 기술적 약속을 프로토콜 이라고 한다.

프로토콜 전송 방식

  • TCP(연결지향적 프로그램, Transmission Control Protocol)
    • 서버가 보낸 응답을 클라이언트가 받았는지 메세지를 보내는 방식
    • 속도는 느리지만 손실이 없음(정확)
  • UDP(사용자 데이터그램 프로토콜, User Datagram Protocol)
    • 서버가 보낸 응답을 클라이언트가 받았는지 확인하지 않고 계속 다음 응답을 보내는 방식
    • 속도는 빠르지만 손실이 있음
    • 게임프로그램에서 주로 쓰임

2.2 TCP소켓 프로그래밍

2.3 UDP소켓 프로그래밍