본문 바로가기
코스웨어/13년 스마트컨트롤러

Socket 관련 함수 정리

by 알 수 없는 사용자 2013. 7. 19.
728x90
반응형

소켓을 이용한 통신

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>
 int listen (int sockfd, int backlog);

 인  자

 sockfd : socket으로 미리 생성된 소켓 기술자
 bakclog : 큐의 사이즈. 큐는 동시에 들어오는 여러 연결 요청을 넣어둠

 반환값 성공 : 0
 실패 : -1

 accept

 의  미

 연결형 소켓으로 통신을 할 때 상대의 연결 요청 수락

 사용예

 #include <sys/types.h>
 #include <sys/socket.h>
 int accept (int sockfd, struct sockaddr *addr, socklen_t *addrlen);

 인  자

 sockfd : socket으로 미리 생성된 소켓 기술자
 addr : 연결 요청한 상대에 대한 정보가 저장

 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 : 소켓 기술자
 serv_addr : 통신을 연결할 상대의 주소 등에 관한 정보 저장
 addrlen : serv_addr 의 크기

 반환값 성공 : 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>
 struct gostent *gethostbyaddr (const char *addr, int len, int type);

 인  자 addr : 바이너리 형태의 IP 주소
 len : addr의 바이트 크기
 type : 프로토콜 군을 지정
 반환값 성공 : struct hostent형의 포인터 반환
 실패 : NULL


728x90

'코스웨어 > 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