ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 뇌자극 TCP/IP 4강 요약
    C_C++ 프로그래밍/뇌를 자극하는 TCP_IP 2019. 5. 19. 22:49





    네트워크 프로그램의 흐름 이해하기


    1. 기존의 망에 노드를 추가한다.

      => 인터넷 망에 접속하기 위해 (소켓)


    2. 그 노드를 링크에 연결하기

     => Socket (IP 주소 + Port 번호)


    3. 통신 상대를 찾아가기

    1. 송신측

    소켓 생성 -> 포트 부여 -> 상대편 IP/Port 주소로 연결 -> 통신 -> 종료

     2. 수신측

    소켓 생성 -> 포트 부여 -> 상대편 연결 기다리기 -> 통신 -> 종료





    // 인터넷과 연결하기 위한 접점 소켓을 생성한다.
    #include <sys/types.h>
    #include <sys/socket.h>

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


    //domain : 소켓의 사용 영역을 정의한다.
    //type : 소켓 유형을 정의한다.
    //protocol : 소켓이 사용할 프로토콜을 정의한다.




    Domain

    소켓의 사용 영역을 정의한다.

    소켓도 인터넷에서 사용하는가, 컴퓨터에서 사용하는 가 등에 따라 나뉜다.

    인터넷 : AF_INET
    컴퓨터 : AF_UNIX



    Type & Protocol

    UDP 통신과 TCP 통신은 다르다.

    - SOCKET_STREAM <-> IPPROTO_TCP
    - SOCKET_DGRAM  <-> IPPROTO_UDP




    소켓 함수의 예

    1. socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)    // TCP 소켓
    2. socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)    // UDP 소켓
    =>  2개를 95% 이상의 프로그램에서 사용

    반환에 성공하면 1을 반환한다. (fd)



    인터넷 주소와 포트번호를 이용해서 원격 소켓에 연결하기

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


    원격 소켓의 인터넷 주소 지정하기

    // IP + 포트 번호

    struct sockaddr_in serveraddr;

    server_sockfd = socket(AF_INET, SOCK_STREAM,0);   
    serveraddr.sin_family = AF_INET;                                                     // 사용할 도메인
    serveraddr.sin_addr.s_addr = inet_addr("//internet addr");    // 인터넷 주소
    serveraddr.sin_port = htons(8080);                                                // 포트 번호

    client_len = sizeof(serveraddr);                                                        // 길이를 알아야 정상 작동
    connet(server_sockfd, (struct sockaddr *)& serveraddr, client_len);



    함수
    데이터 입출력
    소켓 함수 : send, recv, sendto, recvfrom
    파일 함수 : read, write

    입력 함수
    send, sendto, read

    출력 함수
    recv, sendto, wrtie


    사용법은 거의 비슷하며, 파라미터로
    (int fd, void *buf, size_t count);
    fd = 소켓 지정 번호
    buf or msg = 보낼 메시지 혹은 받을 공간
    count  = 그 크기

    성공 시 0보다 큰 값 return
    실패 시 0    return

    * flag는 추후에 알아보자

    윈도우는 closeSocket()
    유닉스는 close()

    => 윈도우는 소켓을 파일 단위로 보지 않는다.



    서버 프로그램 흐름도

    socket() -> ( bind() -> listen() -> accept() ) -> read() || write() -> close()
    bind : port에 연결
    listen : 수신 대기열을 만든다.
    accept : 수신 성공



    클라이언트 프로그램 흐름도

    socket() -------------> connect()-> read() || wrtie() ->close()

    ※ 본 글은 개인 포트폴리오 혹은 공부용으로 사용하기 때문에, 무단 복사 유포는 금지하지만, 개인 공부 용도로는 얼마든지 사용하셔도 좋습니다


    반응형

    'C_C++ 프로그래밍 > 뇌를 자극하는 TCP_IP' 카테고리의 다른 글

    뇌자극 TCP/IP 6강 요약  (0) 2019.05.25
    뇌자극 TCP/IP 5강 요약  (0) 2019.05.20
    뇌자극 TCP/IP 3강 요약  (0) 2019.05.19
    뇌자극 TCP/IP 2강 요약  (0) 2019.05.19
Designed by Tistory.