본문 바로가기

Programming/VC++

[C] 소켓 기본 함수

출처 블로그 > Programming Tipping since Mar 2005
원본 http://blog.naver.com/cache798/120011094110

소켓 기본 함수.


1. 소켓 생성과 해지


   int socket(int protocolFamily, int type, int protocol)

   ex)

   if ((sock=socket(PF_INET,SOCK_STREAM,IPPROTO_TCP)) < 0)

        perror("socket() failed");


   int close(int socket)


2. TCP 클라이언트가 수행하는 전형적인 네개의 단계


   1) socket()을 이용하여 TCP 소켓을 생성한다.

   2) connect()을 이용하여 서버와 연결을 설정한다.

   3) send()와 recv()를 사용하여 통신한다.

   4) close()로 연결을 닫는다.


   int connect(int socket, struct sockaddr *foreignAddress, unsigned int addressLength)

   ex)

     if(connect(sock,(struct sockaddr *)&echoServAddr,sizeof(echoServAddr))< 0)

        perror("connect() failed");


   int send(int socket, const void *msg, unsigned int msgLength,int flags)

   ex)

     if (send(sock,echoString,echoStringLen,0) != echoStringLen )

        perror("send() failed");

       

   int recv(int socket,void *rcvBuffer,unsigned int bufferLength, int flags)

   ex)

     if ((byteRecvd=recv(sock,echoBuffer,RCVBUFSIZE-1,0))<=0)

        perror("recv() failed");

       

3. TCP서버 통신을 위해서 다음 네개 단계가 필요하다.


   1) socket()을 이용하여 TCP socket을 생성한다.

   2) bind()로 소켓에 한 포트번호를 부여한다.

   3) listen()을 이용하여 그 포트로 연결요구를 허락하도록 알린다.

   4) 다음 과정을 반복한다.

      (1) 각 클라이언트에 대한 새로운 소켓을 얻기위해 accept()를 호출한다.

      (2) send()와 recv()를 사용 그 새로운 소켓을 통해 클라이언트와 통신한다.

      (3) close()를 사용하여 해당 클라이언트와의 연결을 닫는다.


   int bind(int socket, struct sockaddr *localAddress, unsigned int addressLength)

   ex)

        if (bind(servSock,(struct sockaddr *)&echoServAddr,sizeof(echoServAddr))<0)

        perror("bind() failed");


   int listen(int socket, int queueLimit)

   ex)

        if (listen(servSock,MAXPENDING)<0)

                perror("listen() failed");


   int accept(int socket, struct sockaddr *clientAddress, unsigned int *addressLength)

   ex)

        if ((clntSock=accept(servSock,(struct sockaddr *)&echoClntAddr,&clntLen))<0)

                perror("accept() failed");

'Programming > VC++' 카테고리의 다른 글

[C] const와 pointer의 조합  (0) 2007.08.01
[C] C언어 강좌  (0) 2007.08.01
[C] 고수준 파일 입출력 함수 정리  (0) 2007.08.01
[C] 시스템 호출 함수 정리  (0) 2007.08.01
[C] strncpy()  (0) 2007.08.01