검색 여닫기
검색
메뉴 여닫기
555
262
4
6.2천
noriwiki
둘러보기
대문
최근 바뀜
임의의 문서로
미디어위키 도움말
특수 문서 목록
파일 올리기
환경 설정 메뉴 여닫기
notifications
개인 메뉴 여닫기
로그인하지 않음
지금 편집한다면 당신의 IP 주소가 공개될 수 있습니다.
user-interface-preferences
한국어
개인 도구
로그인
Socket programming 문서 원본 보기
noriwiki
문서 공유하기
다른 명령
←
Socket programming
문서 편집 권한이 없습니다. 다음 이유를 확인해주세요:
요청한 명령은 다음 권한을 가진 사용자에게 제한됩니다:
사용자
.
문서의 원본을 보거나 복사할 수 있습니다.
상위 문서: [[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를 가능케 한다. 이때 UDP와 TCP의 datagram의 헤더 파일에는 모두 목적지의 IP 주소와 port 번호가 포함된다. 하지만 UDP는 연결 설정 과정이 없기 때문에, 매번 데이터를 전송할 때마다 프로그래머는 상대방의 주소(IP 주소와 포트 번호)를 명시해야 한다. 하지만 TCP는 최초 연결 설정 시 이미 양쪽의 IP 주소와 포트 번호를 교환하고 기록해두고, 이후 데이터를 전송할 때 운영체제와 프로토콜 스택이 이 주소 정보를 자동으로 관리한다. 따라서 개발자는 데이터를 보낼 때마다 매번 IP 주소와 포트 번호를 명시할 필요가 없습니다. ==Socket programming with UDP== [[파일:The client-server application using UDP.png|테두리|프레임없음|450x450px]] 위는 UDP에 의해 구현된 클라이언트와 서버가 데이터를 주고 받는 socket 프로그래밍의 예시를 보여준다. * Server 측 *# 서버는 특정 포트 번호(port=x)를 사용하여 UDP 소켓을 생성한다. *#* serverSocket = socket(AF_INET, SOCK_DGRAM) 명령어로 수행된다.<ref>SOCK_DGRAM은 UDP socket임을 나타낸다.</ref> *# 서버는 클라이언트가 보낸 UDP 세그먼트(데이터그램)를 기다렸다가 읽는다. *# 서버는 클라이언트로부터 받은 데이터에 대한 응답(reply)을 서버의 소켓을 통해 다시 전송한다. * Client 측 *# 클라이언트는 UDP 소켓을 생성한다. *#* clientSocket = socket(AF_INET, SOCK_DGRAM) 명령어로 수행된다. *# 클라이언트는 서버의 IP 주소와 포트 번호를 목적지로 하는 데이터그램(datagram)을 생성하고 이를 serverSocket에게 전송한다. *# 서버가 응답을 보내면, 클라이언트는 clientSocket을 통해 그 응답을 읽고 해당 socket을 닫고 종료한다. ==Socket programming with TCP== [[파일:The client-server application using TCP.png|테두리|프레임없음|466x466픽셀]] 위는 TCP에 의해 구현된 클라이언트와 서버가 데이터를 주고 받는 socket 프로그래밍의 예시를 보여준다. * Server 측 *# 서버는 클라이언트의 요청(request)을 받기 위해 특정 포트 번호(port=x)를 사용하여 소켓을 생성한다. *#* serverSocket = socket() 명령어로 수행된다. *# 서버는 클라이언트로부터의 TCP 연결 요청을 기다린다. *#* connectionSocket = serverSocket.accept() 명령어를 통해 TCP 연결이 설정된다.<ref>accept()는 연결 요청이 도착할 때까지 기다리며, 요청이 오면 이를 수락하여 새로운 소켓인 connectionSocket을 반환한다.</ref> *# 서버는 연결된 클라이언트로부터 전송된 데이터를 connectionSocket을 통해 읽는다. *# 서버는 클라이언트로부터 받은 요청에 대해 처리 후, 응답(reply)을 clientSocket으로 전송한다. *# reply 전송이 끝나면 서버는 connectionSocket을 닫고 이를 종료한다. * Client 측 *# 클라이언트는 서버 IP 주소와 포트 번호(port=x)를 사용하여 서버와의 TCP 연결을 설정하기 위한 소켓을 생성한다. *#* clientSocket = socket() 명령어로 수행된다. *# 클라이언트는 clientSocket을 통해 서버에 요청(request)을 보낸다. *# 서버로부터 전송된 응답(reply)을 클라이언트의 clientSocket을 통해 읽는다. *# 클라이언트는 응답을 받은 후, clientSocket을 닫고 종료한다. ==각주== [[분류:컴퓨터 네트워크]]
Socket programming
문서로 돌아갑니다.