삽질의 현장/- ETC

[삽잡이::Socket] Socket 프로그래밍 구조 (client)

shovelman 2013. 9. 16. 00:12

1. 소켓 생성 (ex) 전화기 구입

 

#include <sys/socket.h>

int socket(int domain, int type, int protocol);

 

- domain : 소켓이 사용할 프로토콜 체계(Protocol Family) 전달.

프로토콜 체계

- IP_INET( IPv4 인터넷 프로토콜 체계)

- IP_INET6( IPv6 인터넷 프로토콜 체계)

- IP_LOCAL( 로컬 통신을 위한 UNIX 프로토콜 체계)

- IP_PACKET( Low Level 소켓을 위한 프로토콜 체계)

- IP_IPX (IPX 노벨 프로토콜 체계)

- type : 소켓의 데이터 전송방식에 대한 정보 전달.

- SOCK_STREAM( 연결지향성 소켓)

- SOCK_DGRAM( 비 연결지향성 소켓)

- protocol : 두 컴퓨터간 통신에 사용되는 프로토콜 정보 전달.

= 프로토콜의 최종 선택!

- socket 함수의 첫 번째, 두 번째 전달인자를 통해서도 충분히 원하는 유형의 소켓을 생성할 수 있다. 따라서 대부분의 경우, 세 번째 인자로 그냥 0을 넘겨줘도 무방하다.

 

2. 연결요청 (ex) 전화 걸기

 

#include <sys/socket.h>

int connect(int sock, struct sockaddr *servaddr, socklen_t addrlen);

 

- sock : 클라이언트 소켓의 파일 디스크립터 전달.

- servaddr : 연결요청 할 서버의 주소정보를 담은 변수의 주소 값 전달.

- addrlen : 두 번째 매개변수 servaddr에 전달된 주소의 변수 크기를 바이트 단위로 전달.

 

* 클라이언트 소켓의 주소정보

- bind 함수를 통해서 소켓에 IP와 PORT를 직접 할당하지 않아도 connect 함수호출 시 자동으로 소켓에 IP와 PORT가 할당된다. 따라서 클라이언트 프로그램을 구현할 때에는 bind함수를 명시적으로 호출할 필요가 없다.

 

 

<참조 : 열혈 TCP/IP 소켓 프로그래밍>