안녕하세요 허언증입니다.
소켓통신에서 데이터 송수신 함수로는 send, recv / sendto, recvfrom 이 있다.
(1) 함수원형
○ send(int sockfd, const void *buf, size_t len, int flags)
○ recv(int sockfd, const void *buf, size_t len, int flags)
○ sendto(int sockfd, const void *buf, size_t len, int flags, const struct sockaddr *dest_addr, socklen_t addrlen)
○ recvfrom(int sockfd, void *buf, size_t len, int flags, struct sockaddr *src_addr, socklen_t *addrlen)
(2) TCP 데이터 송수신
: send() / recv()함수는 address를 지정할수 없음, TCP 통신에서 사용 (연결지향)
(물론 sendto/recvfrom도 사용 가능)
send(int sockfd, const void *buf, size_t len, int flags)
- return value : 전송 성공 시 전송한 바이트 수 반환 , 실패 시 -1 반환
recv(int sockfd, const void *buf, size_t len, int flags)
- return value : 전송 성공 시 전송한 바이트 수 반환 , 실패 시 -1 반환
=> 서버측에서는 accept하여 생성된 소켓을, 클라이언트측에서는 connect에 사용한 소켓을,
이용하여 데이터를 송수신 한다.
(3) UDP 데이터 송수신
: sendto() / recvfrom()함수는 address를 지정가능, UDP 통신에서 사용 (비연결지향)
sendto(int sockfd, const void *buf, size_t len, int flags, const struct sockaddr *dest_addr, socklen_t addrlen)
- dest_addr : 데이터가 전송될 원격 호스트의 주소
- len : 주소정보 구조체의 길이(구조체의 길이를 읽으므로 int형)
recvfrom(int sockfd, void *buf, size_t len, int flags, struct sockaddr *src_addr, socklen_t *addrlen)
- src_addr : 수신받은 데이터를 송신한 단말의 주소를 리턴받기 위한 버퍼 포인터
- addrlen : 주소정보 구조체의 길이(구조체의 길이를 입력 받으므로 포인터형)
(4) 데이터 송수신용 시스템 호출
- write : Stream소켓을 통한 데이터 송신
- read : Stream소켓을 통해 데이터 수신
- send : Option을 규정하는 데이터 송신(Stream 소켓)
- recv : Options을 규정하는 데이터 수신(Stream 소켓)
- sendto : Datagram소켓을 통해 데이터 송신
- recvfrom : Datagram소켓을 통해 데이터 수신
참고
일부 출처:
'# Language > [ C & C++ ]' 카테고리의 다른 글
[C & C++] C & C++ 자료형 총 집합 (0) | 2019.12.14 |
---|---|
[C & C++] select() , WSAEventSelect() 함수 (feat.FD_set) (0) | 2019.12.12 |
[C & C++] recv() , recvfrom() 차이점 (feat. network_socket) (0) | 2019.12.05 |
[C & C++] send() , sendto() 차이점 (feat. network_socket) (0) | 2019.12.05 |
[C & C++] ZeroMemory() , memset() 차이점 (feat. 구조체 초기화) (0) | 2019.12.05 |