Busan IT/공장내 Network

Server/Client socket 프로그램 만들기

newind2000 2015. 7. 13. 17:47

================================ Outline ====================================

Server/Client socket 프로그램 만들기

----------------------------------------------------------------------------

 

예약된 PORT 번호는 1 - 1,024이며 system에서 사용한다.

//가장 흔히 사용하는 webPORT #80이다.



일반적으로는 995까지는 시스템에서 사용한다. bind함수를 사용하여 socket정보를 엮을 때 1024내에 번호를 설정하면 오류가 난다.

 

 

사용 가능한 PORT 번호는 0 - 65,535까지이다.

 

make 명령어를 사용하여 컴파일이 가능하도록 만들어 보자.

 

vi편집기 기본 세팅문서로 들어간다.

 

# vi /home/newind2000/.vimrc

 

vi편집기의 기본세팅에 스페이스가 입력되는 설정을 주석처리 해주자. 주석처리는 로 해준다.

 

 

vi makefile을 입력하여 makefile을 만든다.

아래와 같이 편집한다.

//골뱅이(@)가 없으면 명령어인 echo test가 같이 출력 됨으로 골뱅이 표시를 넣어준다.

make를 치면 아래와 같이 출력된다.

 

 

 

이것을 적용하여,

 

server : server.c smartsock.h

gcc -lm -o server server.c

 

다음과 같이 명령어를 넣어주면 ‘make'만 쳐도 컴파일이 된다.

 

! 명령어(위에서는 ‘gcc') 이전에는 TAB키를 사용하여 띄워주어야 함을 명심하자.


/*** 소스 ***/



#include "smartsock.h"

int main(void)
{
    int iSock;   //소켓 함수의 반환 값을 받는 변수
    int iRet;
    struct sockaddr_in stAddr;

    iSock = socket(AF_INET, SOCK_STREAM, 0);    //AF_INET = 2, 
    if(0 > iSock)
    {
        perror("socket : ");
        return -1;
    }
    // stAddr구조체에 socket연결을 위한 필수 정보 입력  setting
    bzero(&stAddr, sizeof(stAddr));            //구조체 비우기(0으로 채우기)
    stAddr.sin_family = AF_INET;               //#define AF_INET 2 /* IP protocol family. */
    stAddr.sin_addr.s_addr = inet_addr(IP);    //IP와 PORT값은 헤더파일에 정의되어 있다.
    stAddr.sin_port = htons((PORT));

    iRet = bind(iSock, (struct sockaddr *)&stAddr,sizeof(stAddr));
    if(iRet < 0)
    {
        perror("bind : ");
        close(iSock);

        return -2;
    }

    close(iSock);
    return 0;
}


#ifndef __SMART_SOCKET_H__
#define __SMART_SOCKET_H__
#include <stdio.h>
#include <sys/types.h>          /* See NOTES */
#include <sys/socket.h>
#include <sys/stat.h>
#include <unistd.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdlib.h>
#include <string.h>



#endif // __SMART_SOCKET_H__











 

 

 

 

 

 

반응형