Background: TCP and UDP

TCP(Transmission Control Protocol) and UDP(UserDatagram Protocol)

TCP : reliable data transfer(신뢰할만한 데이터 전송) UDP : fast communication than rekliability, multicast and broadcast(신뢰보다는 속도 중심의 전송)

https://images.velog.io/images/tonyhan18/post/51b37eb8-a549-43db-b819-c845722d64cb/image.png

TCP는 연결이 필요하고 UDP는 연결없이 일단 데이터 전송을 한다. TCP는 1:1 통신이고 UDP는 1:다 통신이다.

TCP는 데이터가 보내진 순서대로 받는다. UDP는 보내진 순서와 관계없이 받을 수 있다. TCP는 신뢰있게 데이터가 보내진다. UDP는 데이터가 중간에 날아갈 수 있다. TCP는 속도가 UDP보다 느리다. UDP는 TCP보다 속도가 빠르다.

자바 클래스에서 Socket을 사용하면 TCP. 자바 클래스에서 Datagram, Multicast 가 나오면 UDP.

TCP Socket Programming

Socket에는 IP address와 Port 번호가 존재한다. 그래서 client와 server은 TCP socket을 이용해서 통신을 하게 된다.

  1. 서버가 ServerSocket을 만들어서 특정 Port에서 기다린다. 그리고 클라이언트가 접속 요청이 될때까지 기다린다.
  2. 클라이언트는 서버의 IP 주소와 port number을 가지고 socket을 만든다. 서버와 연결요청을 보낸다.
  3. Server 소켓이 client 요청을 받아들이고 client을 위한 Socket(!= Server Socket)을 만들어 놓고 client Socket과 연결한다.
  4. 최종적으로 서버와 서버의 소켓간의 데이터 통신이 이루어 진다.

TCP Socket Programming: Socket and ServerSocket

이제 Client와 Server간에 Socket으로 통신을 하게 되고 통신은 InputStream과 OutputStream을 이용해서 상호 데이터를 주고 받게 된다.

![<https://images.velog.io/images/tonyhan18/post/29e7d7b1-96fc-45f2-b997-6f7ce49b3d51/image.png>](<https://images.velog.io/images/tonyhan18/post/29e7d7b1-96fc-45f2-b997-6f7ce49b3d51/image.png>)

TCP Socket Programming: Server

먼저 서버 소켓을 만들고 port와 연동(bind)해 놓는다.

이때 port number은 서버가 열어놓을 포트 번호이다. 만약에 해당 포트 번호에 다른 애플리케이션이 사용하고 있다면 우리는 이 포트를 사용할 수 없다.

서버는 한번 켜놓으면 프로그램을 계속 돌리는 것이다. 그래서 중간에 infinite while loop를 사용하였다.