소켓을 이용한 통신
1. 연결형 통신 모델
2. 비연결형 통신 모델
1. 연결형 관련 함수
서버/클라이언트 관련 시스템 호출/표준 라이브러리 함수 목록
함 수 | 의 미 |
inet_addr | 문자열 형태의 인터넷 주소를 바이너리 형태로 변환 |
inet_ntoa | 바이너리 형태의 인터넷 주소를 문자열 형태로 변환 |
socket | 통신에 사용하기 위해 소켓 생성 |
bind | 호스트의 로컬 주소를 소켓과 연결 |
listen | 소켓을 연결 요청 대기 상태로 만듬 |
accept | 연결 요청을 수락 |
connect | 연결을 요청 |
recv | 소켓을 통해 데이터를 수신 |
send | 소켓을 통해 데이터를 전송 |
inet_addr, inet_ntoa | |
의미 | inet_addr : 문자열로 표현된 인터넷 호스트 주소를 바이너리로 변환 inet_ntoa : 바이너리로 표현된 인터넷 호스트 주소를 문자열로 변환 |
사용예 | #include <arpa/inet.h> in_addr_t inet_addr (const char *ip_addr); char *inet_ntoa (struct in_addr n_addr); |
인 자 | ip_addr : 문자열로 표현된 인터넷 호스트 주소 n_addr : 바이너리로 표현된 인터넷 호스트 주소 |
반환값 | inet_addr 성공 : 바이너리로 변환된 인터넷 주소 실패 : -1 inet_ntoa 성공 : 문자열로 변환된 인터넷 주소의 포인터 실패 : -1 |
socket | |
의 미 | 프로세스 간 통신을 위한 endpoint 생성 |
사용예 | #include <sys/types.h> #include <sys/socket.h> int socket (int domain, int type, int protocol); |
인 자 | domain : 통신에 사용되는 프로토콜 집단을 지정 type : 통신 방법 선택 protocol : 선택된 프로토콜 군에서 특정 프로토콜을 선택 |
반환값 | 성공 : 소켓 기술자 실패 : -1 |
bind | |
의 미 | 호스트의 로컬 주소를 소켓과 연결 |
사용예 | #include <sys/types.h> #include <sys/socket.h> int bind (int sockfd, struct sockaddr *my_addr, socklen_t addrlen); |
인 자 | sockfd : socket으로 미리 생성된 소켓 기술자 my_addr : 호스트의 로컬 주소 addrlen : my_addr의 바이트 길이 |
반환값 | 성공 : 0 실패 : -1 |
listen | |
의 미 | 소켓을 통해 들어오는 연결 요청을 기다림 |
사용예 | #include <sys/socket.h> |
인 자 | sockfd : socket으로 미리 생성된 소켓 기술자 |
반환값 | 성공 : 0 실패 : -1 |
accept | |
의 미 | 연결형 소켓으로 통신을 할 때 상대의 연결 요청 수락 |
사용예 | #include <sys/types.h> |
인 자 | sockfd : socket으로 미리 생성된 소켓 기술자 addrlen : addr의 바이트 길이 |
반환값 | 성공 : 음수가 아닌 정수형의 새로운 소켓 기술자 실패 : -1 |
connect | |
의 미 | listen 상태로 대기중인 상대 프로세스에게 연결 요청 |
사용예 | #include <sys/types.h> #include <sys/socket.h> int connect (int sockfd, const struct sockaddr *serv_addr, socklen_t addrlen); |
인 자 | sockfd : 소켓 기술자 |
반환값 | 성공 : 0 실패 : -1 |
send, recv | |
의 미 | 지정한 소켓을 사용하여 메시지를 전송하거나 수신 |
사용예 | #include <sys/types.h> #include <sys/socket.h> int send (int sockfd, const void *msg, size_t msg_len, int flags); int recv (int sockfd, void *msg, size_t msg_len, int flags); |
인 자 | sockfd : 메시지를 전송하거나 수신할 소켓 기술자 msg : 메시지 msg_len : msg의 길이 flags : 전송하거나 수신하는 방법 선택 |
반환값 | send 성공 : 전송한 문자수 실패 : -1 recv 성공 : 수신한 바이트 수 실패 : -1 |
2. 비연결형 관련 함수
함 수 | 의 미 |
recvfrom | 비연결형 모델에서 소켓을 통해 메시지를 수신 |
sendto | 비연결형 모델에서 소켓을 통해 메시지를 송신 |
uname | 호스트의 이름을 포함한 시스템의 정보를 알아옴 |
gethostname | 호스트의 이름을 알아옴 |
gethostbyname | 이름으로 지정한 호스트의 네트워크 정보를 알아옴 |
gethostbyaddr | 인터넷 주소로 지정한 호스트의 네트워크 정보를 알아옴 |
recvfrom | |
의 미 | 비연결형 통신 모델에서 소켓을 통해 메시지를 수신 |
사용예 | #include <sys/types.h> #include <sys/socket.h> int recvfrom (int sockfd, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlen); |
인 자 | sockfd : 소켓 기술자 buf : 수신한 메시지를 저장할 버퍼 len : buf의 크기 flags : recvfrom의 동작 방식을 결정 (recv와 동일) from : 메시지를 송신한 쪽의 정보가 저장 fromlen : from 의 바이트 크기 |
반환값 | 성공 : 수신한 메시지의 바이트 크기 실패 : -1 |
sendto | |
의 미 | 비연결형 통신 모델에서 소켓을 통해 메시지를 송신 |
사용예 | #include <sys/types.h> #include <sys/socket.h> int sendto (int sockfd, const void *msg, size_t len, int flags, const struct sockaddr *to, socklen_t tolen); |
인 자 | sockfd : 소켓 기술자 msg : 전송할 메시지를 저장하고 있는 버퍼 len : 전송할 메시지의 길이 flags : sendto의 동작 방식 결정 (send와 동일) to : 메시지를 송신할 상대의 주소 등의 정보 tolen : to의 바이트 크기 |
반환값 | 성공 : 전송한 메시지의 문자 개수 실패 : -1 |
uname, gethostname | |
의 미 | 현재의 호스트명을 구함 |
사용예 | #include <sys/utsname.h> int uname (struct utsname *buf); #include <unistd.h> int gethostname (char *name, size_t len); |
인 자 | buf : 호스트의 시스템 정보가 저장 name : 호스트명이 저장 len : name의 길이 |
반환값 | 성공 : 0 실패 : -1 |
gethostbyname | |
의 미 | 호스트명으로 주소와 관련된 정보를 알아옴 |
사용예 | #include <netdb.h> struct hostent *gethostbyname (const char *name); |
인 자 | name : 호스트명으로 도메인 네임 주소까지 포함 |
반환값 | 성공 : struct hostent형의 포인터 반환 실패 : NULL |
gethostbyaddr | |
의 미 | 주어진 바이너리 IP주소에 해당하는 호스트의 이름을 구함 |
사용예 | #include <netdb.h> |
인 자 | addr : 바이너리 형태의 IP 주소 len : addr의 바이트 크기 type : 프로토콜 군을 지정 |
반환값 | 성공 : struct hostent형의 포인터 반환 실패 : NULL |
'코스웨어 > 13년 스마트컨트롤러' 카테고리의 다른 글
부산 바캉스 2 (3) | 2013.08.05 |
---|---|
부산바캉스~ (1) | 2013.08.05 |
문자열로 시간을 표현해주는 strftime 함수 (0) | 2013.08.05 |
회로 설계시 주의사항 - 전지내부저항 (0) | 2013.07.24 |
ARP 헤더 (1) | 2013.07.15 |
7월 12일 수업자료 (0) | 2013.07.12 |
0711-수업정리 문예진 (0) | 2013.07.11 |
130709 화 정리 - 조유진 (1) | 2013.07.09 |