관리 메뉴

IT 쟁이

소켓통신 본문

C/C++/API/MFC

소켓통신

꾸준한 사람이 되자 클라인STR 2018.10.07 20:53

socket 함수 - 소켓지정자 socket

#include <sys / types.h>

#include <sys/socket.h>

 

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

 

int domain - 통신도메인을 지정하는 인자

 

각 도메인은 프로토콜 패밀리로 정의되고 있다.

주로 PF_INET 혹은 AF_INET 사용한다. 인터넷 프로토콜

 

int type  - 소켓의 형태 . 소켓의 연결 형식을 정의한다.

PF_INET의 경우, 가장 많이 사용하는 소켓 연결형식에는 SOCK_STREAM, SOCK_DGRAM, SOCK_RAW가 있다.

SOCK_STREAM 은 TCP/IP 인터넷 프로토콜에서 TCP를 통해서 전송되는 신뢰성 있는 연결을 의미한다.

 

 

 

int protoco  - 프로토콜  - IPPROTO_TCP

 

socket 함수는 인자 값을 받아 소켓을 생성한 후에 해당 소켓의 지정자를 반환한다. 그리고 오류가 발생한 경우에 는 소켓 지정자에 0 보다 작은 값을 반환하고 성공한 경우에는 소켓에 할당된 경우인 소켓 지정자를 반환한다.

 

 

struct sockaddr_in server_addr은 INET 인터넷 프로토콜의 헤더를 구성하는 구조체이다.

......

struct sockaddr_in {

 

 sa_family_t sin_family; //주소패밀리

unsigned short int sin_port; //포트번호

struct in_addr sin_addr; //IP주소

...

}

 

server_addr.sin_family = AF_INET;

server_addr.sin_addr.s_addr = inet_addr("127.0.0.1");

server_addr.sin_port = htons(3317);

 

 

inet_addr함수

이진 바이너리 형식의  IP 주소 inet_addr (문자 형식의 IP 주소)

#include <sys/type.h>

#include <netinet/in.h>

 

unsigned long int inet_addr(const char *cp);

 

htons 함수  - 네트워크 바이트 오더가 적용된 이진 바이너리 16비트 값 htons (16비트 변수 값)

#include <netinet/in.h>

 

uint16_t htons(uint16_t hostshort)

 

해당 포트의 값을 넣을 때 네트워크 바이트 오더를 맞춰주는 htons함수를 사용.

 

 

// 지정한 주소로 접속

if(connect(ssock, (struct sockaddr *)&server_addr, clen) < 0)

{

perror("connect error: ");

exit(1);

}

connect 함수 - 리턴값 connect (소켓 디스크립션, 서버의 IP주소와 포트번호, 길이)

소켓연결을 시작한다. 생성된 소켓과 서버의 정보를 이용해서 해당 서버에 연결한 후 결과 값을 리턴한다. 0이면 성공, -1이면 실패를 의미한다.

#include <sys/type.h>

#include <sys/socket.h>

int connect(int sockfd, const struct sockaddr *serv_addr, socklen_t addrlen);

 

 

read함수 데이터를 수신한 후 buf에 데이터를 넣어준다. 우리는 buf의 내용을 화면에 출력해서 데이터를 확인할 수 있다.

 

read 함수 - 읽은 값의 길이 read (파일 디스크립터, 읽은 데이터를 저장할 버퍼, 읽을 데이터  최대길이)

 

지정된파일 디스크립터에서 데이터르 읽어서 지정된 버퍼에 데이터를 넣은 후 읽은 데이터의 길이를 반환한다. 오류가 발생하면 -1을 반환한다.

네트워크 프로그래밍에서는 파일디스크립터가 소켓 디스크립터이다. 소켓 디스크립터는 socket 함수가 반환하는 소켓의 번호를 의미하며 우리는 이것을 소켓 지정자라 한다.

#include <unistd.h>

ssize_t rread(int fd, void *buf, size_t count)

 

close 함수 - 성공 여부 반환 close(파일 디스크립터)

 

close 함수는 파일 디스크립터를 닫는다. 닫힌 파일 디스크립터는 더 이상 참조되거나 사용될 수 없다. 닫기에 성공하면 0을 반환하고 오류가 발생하면 -1을 반환한다.

파일디스크립터 == 소켓 디스크립터이다.

 

#include <unistd.h>

int  close(int fd)

 

 

출처 - 한빛미디어 TCP/IP 소켓 프로그래밍

0 Comments
댓글쓰기 폼