: Socket을 이용한 통신 프로그래밍(TCP기준)
→ C언어를 기준으로 작성되었으나 언어마다 함수의 이름만 다를 뿐 전체적인 흐름과 기능은 같다.
socket (int domain, int type, int protocol)
: socket 생성
domain 옵션 | AF_UNIX | AF_INET | AF_INET6 |
---|---|---|---|
뜻 | process끼리 통신 | IPv4 | IPv6 |
type 옵션 | SOCK_STREAM | SOCK_DGRAM | SOCK_RAW |
---|---|---|---|
뜻 | TCP | UDP | IP계층바로사용 |
protocol 옵션 | IPPROTO_TCP | IPPROTO_UDP | 0 |
---|---|---|---|
뜻 | TCP | UDP | type에서 미리 정의 |
return 값 | -1 | 0 |
---|---|---|
뜻 | 소켓 생성 실패 | 소켓을 가리키는 소켓 디스크립터 |
bind(sockfd, serverIP, serverIP length)
: serverIP, serverPort를 socket에 할당
옵션 | sockfd | serverIP | serverIP length |
---|---|---|---|
뜻 | fd 파일 디스크립터의 약자, socket의 반환값 | server의 IP Address | sizeof(serverIP) , 진짜 길이 |
return 값 | -1 | 0 |
---|---|---|
뜻 | 실패 | 성공 |
listen(sockfd, backlog)
: 대기 상태
옵션 | sockfd | backlog |
---|---|---|
뜻 | socket의 반환값 | 연결 대기열의 크기, request connection socket이 대기하는 대기열 |
return 값 | -1 | 0 |
---|---|---|
뜻 | 실패 | 성공 |
accept(sockfg, clientIP, clientIP_length)
: connection 수락, connectionSocket 생성
→ bind와 형식이 거의 같지만 server가 client로 전송하는 것.
: 데이터 전송 과정
read
write(connectSocket, message, sizeof(message))
옵션 | connectSocket | message | sizeof(message) |
---|---|---|---|
뜻 | 연결에 사용한 connectionSocket | client에게 보낼 메시지 | 메시지의 크기 |
: connection 끊기
close(connectSocket)
: python 기준으로 send()/recv()
는 read()/write()
와 같은 용도이다.
→ RestAPI는 실시간 통신이 아니다.
RestAPI
: server와 client가 메시지를 주고받을 때마다 연결하고 종료하는 형식
socket
: 한번 연결을 하면 메시지를 다 주고받기 전까지 종료하지 않고
메시지를 다 주고받은 후에야 close를 통해 연결을 종료한다.
통신방법 | RestAPI | Socket |
---|---|---|
연결 | data를 한번 주고받을 때마다 | data를 보내기 위한 connection을 맺을 때 |
종료 | data를 한번 주고받을 때마다 | client와 server가 data를 모두 다 주고받았을 때만 |
https://colinch4.github.io/2021-05-14/Rest_%EC%86%8C%EC%BC%93_%EC%B0%A8%EC%9D%B4/