해당 글은 2023. 10. 19에 작성되었습니다.
Socket
: 어플리케이션과 네트워크 사이의 인터페이스
: Application process와 end-end transport protocol(TCP, UDP) 사이에서의 인터페이스 역할
- '문'과 같아서, 어플리케이션 프로세스가 다른 어플리케이션 프로세스로 메세지를 주고 받는 것을 가능하게 한다.
- 어플리케이션은 socket으로 데이터를 받고, 보내고 싶은 data도 socket에 보내서 네트워크 전송을 한다.

2가지 종류의 socket이 있다.
1) TCP
2) UDP
Server와 Client의 상호작용의 관점에서 Socket을 보자
"Server와 Client는 공통의 Socket API를 통해서 메세지를 주고 받는다."
ServerSocket servSock = new ServerSocket(servPort); // welcoming socket이 생성된다.
Socket cIntSocket = servSock.accept(); // "client의 요청이 온다면 받겠다"
Client가 Server와의 연결을 위한 Socket을 생성한다
Socket socket = new Socket(serverIP, servPort); //Socket객체의 이름이 다른것에 유의하자.
Server와 Client 사이에서 communicate이 일어난다.
InputStram in = cIntSock.getInputStream();
recvMsgSize = in.read(byteBuffer);
OutputStream out = socket.getOutputStream();
out.write(byteBuffer);
요약을 하자면 다음과 같다.
Server
local Socket을 생성한다 by serverSocket
local socket을 특정 포트에 Bind한다
incoming connection을 기다린다
connection 요청이 오면 받아들이고, 연결을 위한 새로운 소켓을 할당한다 by Socket
데이터를 주고 받는다.
Client
Client는 Server의 address와 portnumber를 알고 있다.
local socket을 만든다 by Socket
Remote Socket을 연결한다
데이터를 주고 받는다

welcoming(listening) socket은 multiple clients와의 연결이 가능하도록 계속 기다린다.
끝!