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()를 호출하면된다.