ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 중간 과제) socket 프로그래밍
    네트워크 2021. 5. 15. 01:02

    한양대 이석복 교수님의 커리큘럼에 따라 중간고사 시기에 맞추어 중간 과제를 수행하여 포스트한다.
    중간고사 까지의 내용 정리 포스트는 이전에 업로드된 포스트들로 대체하며 별도의 추가 포스트는 하지 않음.

    Layer : App (2주) - Transport (3주) 중간고사 - Network - Link - Physical ...
    출처: https://ingyeoking13.tistory.com/266 [welcome!]

    ````

    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    #include <errno.h>
    #include <string.h>
    #include <sys/types.h>
    #include <netinet/in.h>
    #include <sys/socket.h>
    #include <sys/wait.h>
    #include <arpa/inet.h>
    #include <signal.h>
    #define PORT 3003
    #define BACKLOG 10 /* how many pending connection queue will hold */
    
    void cleanExit(int o){ exit(0); };
    
    int main()
    {
        signal(SIGTERM, cleanExit);
        signal(SIGINT, cleanExit);
        int sockfd, newfd; /* listen on sockfd, new connection on newfd */
    
        struct sockaddr_in serverAddr; /* my addr */
        struct sockaddr_in clientAddr; /* client addr */
    
        // socket()
        if ((sockfd = socket(PF_INET, SOCK_STREAM, 0))== -1)
        {
            perror("socket");
            exit(1);
        }
    
        serverAddr.sin_family = AF_INET;
        serverAddr.sin_port = htons(PORT);
        /* INADDR_ANY allows clients to connect to any one of the host's IP address */
        serverAddr.sin_addr.s_addr = htonl(INADDR_ANY); 
    
        // bind()
        if (bind(sockfd, (struct  sockaddr *)&serverAddr, sizeof(struct sockaddr)) == -1)
        {
            perror("bind");
            exit(1);
        };
    
        if (listen(sockfd, BACKLOG) == -1)
        {
            perror("listen");
            exit(1);
        }
    
        while(1)
        {
            socklen_t sz = sizeof(struct sockaddr_in);
            if ((newfd = accept(sockfd, (struct sockaddr*)&clientAddr, &sz)) ==-1)
            {
                perror("accept");
                continue;
            }
            printf("server: got connection from %s\n", inet_ntoa(clientAddr.sin_addr));
            const char *header =  "HTTP/1.0 200 OK\r\n\r\nHELLO";
            char readbuf[10000];
            int n;
            while((n=read(newfd, readbuf, sizeof(readbuf))) > 0)
            {
                printf("reading.... : %d\n", n);
                if (readbuf[n-1]=='\n') break;
                memset(readbuf, 0, sizeof(readbuf));
            };
            printf("server: got read from %s\n", inet_ntoa(clientAddr.sin_addr));
            printf("data:%s\n", readbuf);
    
            write(newfd, header, strlen(header));
            close(newfd);
            printf("closed\n");
        }
    
    }

    '네트워크' 카테고리의 다른 글

    인강) 네트워크 계층  (0) 2021.08.17
    HTTP 정리  (0) 2021.06.17
    중간 과제) socket 프로그래밍  (0) 2021.05.15
    인강 ) 전송계층(3) - TCP(2)  (0) 2021.05.05
    인강 ) 전송계층(2) - TCP  (0) 2021.05.04
    인강 2) 애플리케이션 계층(완), 전송 계층(1)  (0) 2021.04.17

    댓글 0

Designed by Tistory.