메뉴 여닫기
환경 설정 메뉴 여닫기
개인 메뉴 여닫기
로그인하지 않음
지금 편집한다면 당신의 IP 주소가 공개될 수 있습니다.

Socket programming: 두 판 사이의 차이

noriwiki
Pinkgo (토론 | 기여)
Pinkgo (토론 | 기여)
9번째 줄: 9번째 줄:


위는 UDP에 의해 구현된 클라이언트와 서버가 데이터를 주고 받는 socket 프로그래밍의 예시를 보여준다.  
위는 UDP에 의해 구현된 클라이언트와 서버가 데이터를 주고 받는 socket 프로그래밍의 예시를 보여준다.  
# 먼저 서버와 클라이언트는 데이터를 주고 받기 위해 각각 serverSocket, clientSocket을 만든다.
* Server 측
# 클라이언트는 데이터를 clientSocket를 통해 severSocket에 송신한다.
*# 서버는 특정 포트 번호(port=x)를 사용하여 UDP 소켓을 생성한다.
# 서버는 severSocket을 통해 해당 데이터를 읽는다.  
*#* serverSocket = socket(AF_INET, SOCK_DGRAM) 명령어로 수행된다.<ref>SOCK_DGRAM은 UDP socket임을 나타낸다.</ref>
#* 서버도 데이터를 severSocket를 통해 clientSocket에 답장한다.
*# 서버는 클라이언트가 보낸 UDP 세그먼트(데이터그램)를 기다렸다가 읽는다.
# 클라이언트는 clientSocket을 통해 해당 데이터를 읽고 clientSocket을 닫는다.
*# 서버는 클라이언트로부터 받은 데이터에 대한 응답(reply)을 서버의 소켓을 통해 다시 전송한다.
* Client 측
*# 클라이언트는 UDP 소켓을 생성한다.
*#* clientSocket = socket(AF_INET, SOCK_DGRAM) 명령어로 수행된다.
*# 클라이언트는 서버의 IP 주소와 포트 번호를 목적지로 하는 데이터그램(datagram)을 생성하고 이를 serverSocket에게 전송한다.
*# 서버가 응답을 보내면, 클라이언트는 clientSocket을 통해 그 응답을 읽고 해당 socket을 닫고 종료한다.


==Socket programming with TCP==
==Socket programming with TCP==

2025년 3월 31일 (월) 08:26 판

상위 문서: Application Layer

개요

Socket 프로그래밍(Socket programming)의 목표는 socket을 사용하여 network communication을 사용하는 client/server 애플리케이션을 만드는 것이다. 이때 socket은 사용하는 transport service의 종류, UDP와 TCP에 따라 다르게 구현된다. UDP는 client와 server 사이에 'connection'(handshaking)이 존재하지 않는다. 또한 UDP를 통해서 전송되는 데이터는 out-of-order되거나, 누락될 수도 있다. 하지만 TCP는 handshaking을 통해서 클라이언트와 서버 사이의 'connection'을 구성한 다음, 서버와 클라이언트 사이의 통신이 진행된다. 이를 통해서 reliable data transfer를 가능케 한다.

Socket programming with UDP

파일:The client-server application using UDP.png

위는 UDP에 의해 구현된 클라이언트와 서버가 데이터를 주고 받는 socket 프로그래밍의 예시를 보여준다.

  • Server 측
    1. 서버는 특정 포트 번호(port=x)를 사용하여 UDP 소켓을 생성한다.
      • serverSocket = socket(AF_INET, SOCK_DGRAM) 명령어로 수행된다.[1]
    2. 서버는 클라이언트가 보낸 UDP 세그먼트(데이터그램)를 기다렸다가 읽는다.
    3. 서버는 클라이언트로부터 받은 데이터에 대한 응답(reply)을 서버의 소켓을 통해 다시 전송한다.
  • Client 측
    1. 클라이언트는 UDP 소켓을 생성한다.
      • clientSocket = socket(AF_INET, SOCK_DGRAM) 명령어로 수행된다.
    2. 클라이언트는 서버의 IP 주소와 포트 번호를 목적지로 하는 데이터그램(datagram)을 생성하고 이를 serverSocket에게 전송한다.
    3. 서버가 응답을 보내면, 클라이언트는 clientSocket을 통해 그 응답을 읽고 해당 socket을 닫고 종료한다.

Socket programming with TCP

파일:The client-server application using TCP.png

위는 TCP에 의해 구현된 클라이언트와 서버가 데이터를 주고 받는 socket 프로그래밍의 예시를 보여준다.

  • Server 측
    1. 서버는 클라이언트의 요청(request)을 받기 위해 특정 포트 번호(port=x)를 사용하여 소켓을 생성한다.
      • serverSocket = socket() 명령어로 수행된다.
    2. 서버는 클라이언트로부터의 TCP 연결 요청을 기다린다.
      • connectionSocket = serverSocket.accept() 명령어를 통해 TCP 연결이 설정된다.[2]
    3. 서버는 연결된 클라이언트로부터 전송된 데이터를 connectionSocket을 통해 읽는다.
    4. 서버는 클라이언트로부터 받은 요청에 대해 처리 후, 응답(reply)을 clientSocket으로 전송한다.
    5. reply 전송이 끝나면 서버는 connectionSocket을 닫고 이를 종료한다.
  • Client 측
    1. 클라이언트는 서버 IP 주소와 포트 번호(port=x)를 사용하여 서버와의 TCP 연결을 설정하기 위한 소켓을 생성한다.
      • clientSocket = socket() 명령어로 수행된다.
    2. 클라이언트는 clientSocket을 통해 서버에 요청(request)을 보낸다.
    3. 서버로부터 전송된 응답(reply)을 클라이언트의 clientSocket을 통해 읽는다.
    4. 클라이언트는 응답을 받은 후, clientSocket을 닫고 종료한다.

각주

  1. SOCK_DGRAM은 UDP socket임을 나타낸다.
  2. accept()는 연결 요청이 도착할 때까지 기다리며, 요청이 오면 이를 수락하여 새로운 소켓인 connectionSocket을 반환한다.