본문 바로가기

네트워크/리눅스 기반 강의

2010년 12월 21일 화요일 클라이언트 프로그램 작성 절차

TCP(연결형)소켓을 사용하는 클라이언트 프로그램

TCP 클라이언트 프로그램의 작성 절차는 일반적으로 위와 같다. 소켓의 프로토콜 체계를 PF_INET, 서비스타입을  SOCK_STREAM으로 선택 ex) socket(PF_INET, SOCK_STREAM, 0);
클라이언트는 connect를 호출하기 전에 연결하고자하는 서버의 주소를 지정하여야 하는데, IP주소와 PORT를 포함하는 소켓주소 구조체 sockaddr_in을 작성해야한다. 예제는 다음과 같다.
struct sockaddr_in serv_addr;
memset(&serv_addr, 0, sizeof(serv_addr));
serv_addr.sin_falimy=AF_INET;
serv_addr.sin_addr.s_addr=inet_addr("127.0.0.1");
serv_addr.sin_port=htons(9190);
서버 구조체를 이용하여 서버에 접속을 요청하기위해 connect()를 호출한다.  함수 원형은 다음과 같다.
int connect(int s, const struct sockaddr *addr, int addrlen);
ex) connect(sock, (struct sockaddr *)&serv_addr, sizeof(serv_addr));
클라이언트가 서버와 접속이되면 send(), recv() 또는 read(), write()를 사용하여 메시지를 송수신 할수있다.

문 법

인 자

int send(int s, char* buf, int

              

             length, int flags);

s

소켓 번호

buf

전송할 메시지가 저장된 버퍼

length

buf버퍼의 크기

flags

보통 0

int write(int s, const void*

             

                 buf, int length);

s

소켓 번호

buf

전송할 메시지가 저장된 버퍼

length

buf버퍼의 크기

int recv(int s, char *buf, int

             

               length, int flags);

s

소켓 번호

buf

전송할 메시지가 저장된 버퍼

length

buf버퍼의 크기

flags

보통 0

int read(int s, void* buf, int

              

                   length);

s

소켓 번호

buf

전송할 메시지가 저장된 버퍼

length

buf버퍼의 크기

소켓 사용을 마치려면 해당 소켓번호를 지정하여 close()를 호출하면된다.