컴퓨터 네트워크에서 소켓은 통신을 위한 역할을 수행한다. 두 개의 컴퓨터가 통신을 할 때 각 컴퓨터의 소켓을 통해서 데이터를 교환한다.
소켓 프로그래밍 방식은 크게 TCP, UDP 두 가지로 분류가 된다.
TCP는 연결형 프로토콜이다. UDP에 비해 속도는 느리지만 신뢰성 있는 데이터 송수신을 보장한다. 인터넷 내에서 데이터를 주고 받을 때 경로 설정을 효과적으로 수행하기 위해 데이터를 여러 패킷(Packet)으로 나누어 송수신 한다.
UDP는 비 연결형 프로토콜이다. TCP에 비해 통신의 신뢰성은 부족하지만 빠른 데이터 송수신이 가능하다. 데이터를 주고 받기 전, 사전 통신 절차를 거치지 않는다.
소켓 프로그래밍을 진행 할 때 다음과 같은 계층을 통하여 통신이 이루어지는 것을 감안해야 한다. 우선 응용 계층에는 크롬/파이어폭스와 같은 웹 브라우저를 통하며 이후 전송 계층에서 TCP/UDP와 같은 전송 규약에 따라 통과하게 된다. 인터넷 계층에서는 IP로 통하며 물리 계층에는 이더넷 케이블과 같이 물리적인 장치를 통해 인터넷에 접속하여 통신을 진행하게 된다.
우선 서버에서 소켓을 생성하여 대기(listen)하도록 하며 클라이언트 단에서 소켓을 생성하여 연결을 요청할 때 비로소 소켓 통신을 위한 연결이 완성된다. 이후 필요 데이터를 패킷 단위로 주고 받다가 처리가 끝나면 소켓을 소멸시키는 과정을 거친다.
특정한 프로그램이 통신을 하기위해서 포트 번호를 할당해야 한다. 포트 번호는 16비트로 65,536개를 사용할 수 있으며 1~1024 포트는 시스템 포트로 사용된다.(ex- http : 80 port) 특정 서버 프로그램 생성 시 해당 프로그램이 사용될 포트번호를 1025번 이후로 선택하여 미리 설정해야 한다.
서버 & 클라이언트 구조의 시스템을 구축할 때 서버 프로그램의 포트 번호는 명시적으로 할당해야 한다. 또한 클라이언트 프로그램은 서버의 IP주소와 포트번호를 모두 알고 있어야 한다. 서버와 클라이언트의 연결이 수립되면 클라이언트 컴퓨터는 사용 중이지 않은 임의의 포트가 사용된다.