๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

TIL (Today I Learned)/Network

[tcp/ip]hello, world๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ์†Œ์ผ“ ํ”„๋กœ๊ทธ๋žจ์˜ ๊ธฐ๋Šฅ ํ™•์žฅ

728x90

hello, world๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ์†Œ์ผ“ ํ”„๋กœ๊ทธ๋žจ์˜ ๊ธฐ๋Šฅ ํ™•์žฅ

  • ์ด์ „์— ์ž‘์„ฑํ•œ hello, world๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ์†Œ์ผ“ ํ”„๋กœ๊ทธ๋žจ์— ํด๋ผ์ด์–ธํŠธ ํ”„๋กœ๊ทธ๋žจ์ด ์šฐ์„  ๋ฌธ์ž์—ด print๋ผ๋Š” ๋ช…๋ น๊ณผ ๊ฐ™์€ ์š”์ฒญ์„ ๋ณด๋‚ด๊ณ  ์„œ๋ฒ„ ํ”„๋กœ๊ทธ๋žจ์ด ์ด ์š”์ฒญ์„ ๋ฐ›์•„์•ผ๋งŒ ๋ฌธ์ž์—ด ์ „์†ก์ด ๋˜๋„๋ก ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€
    image
  1. ์—ฐ๊ฒฐ ์š”์ฒญ : ํด๋ผ์ด์–ธํŠธ ํ”„๋กœ๊ทธ๋žจ์€ ์„œ๋ฒ„ ํ”„๋กœ๊ทธ๋žจ์— ์—ฐ๊ฒฐ ์š”์ฒญ์„ ํ•˜๊ณ  ์—ฐ๊ฒฐํ•œ๋‹ค.
  2. print ์š”์ฒญ : ํด๋ผ์ด์–ธํŠธ ํ”„๋กœ๊ทธ๋žจ์€ ์‚ฌ์šฉ์ž๋กœ๋ถ€ํ„ฐ ๋ฌธ์ž์—ด print๋ฅผ ์ž…๋ ฅ๋ฐ›์•„ ์„œ๋ฒ„ ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ ์ „์†กํ•œ๋‹ค.
  3. ๋ฌธ์ž์—ด ์ „์†ก : print ์š”์ฒญ์„ ๋ฐ›์€ ์„œ๋ฒ„ ํ”„๋กœ๊ทธ๋žจ์€ ์‚ฌ์ „ ์•ฝ์†๋Œ€๋กœ ๋ฌธ์ž์—ด hello, wolrd๋ฅผ ํด๋ผ์ด์–ธํŠธ ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ ์ „์†กํ•œ๋‹ค.
  4. ํ™”๋ฉด ์ถœ๋ ฅ : ํด๋ผ์ด์–ธํŠธ ํ”„๋กœ๊ทธ๋žจ์€ ์ „์†ก๋ฐ›์€ ๋ฌธ์ž์—ด(hello, world)์„ ํ™”๋ฉด์— ์ถœ๋ ฅํ•œ๋‹ค.

hello_ext_server.c

#include<stdio.h>
#include <netinet/in.h>
#include <sys/socket.h>
#define PORT 9005
#include<string.h>

char buffer[BUFSIZ] = "HELLO WORLD";
char rBuffer[BUFSIZ];

void printAll(){
        printf("All");
}

int main(){
        int c_socket, s_socket;
        struct sockaddr_in s_addr, c_addr;
        int len;
        int n;

        char *temp;
        int length;

        s_socket = socket(PF_INET, SOCK_STREAM, 0);

        memset(&s_addr, 0, sizeof(s_addr));
        s_addr.sin_addr.s_addr = htonl(INADDR_ANY);
        s_addr.sin_family = AF_INET;
        s_addr.sin_port = htons(PORT);


        if(bind(s_socket, (struct sockaddr *) & s_addr, sizeof(s_addr)) == -1){
                printf("Can not Bind\n");
                return -1;
        }

        /* ์†Œ์ผ“์œผ๋กœ ํ†ต์‹ ์ด ์ด๋ฃจ์–ด์ง€๋„๋ก
         * ์šด์˜์ฒด์ œ(์ปค๋„)์— ๊ฐœํ†ต์„ ์š”์ฒญํ•œ๋‹ค.
         */
        if(listen(s_socket, 5) == -1){
                printf("listen Fail\n");
                return -1;
        }

        /* ์„œ๋ฒ„๊ฐ€ ํด๋ผ์ด์–ธํŠธ๋กœ๋ถ€ํ„ฐ์˜ ์—ฐ๊ฒฐ ์š”์ฒญ์„ ๋ฐ›์•„ ์ฒ˜๋ฆฌ
         * ์š”์ฒญ์„ ๋ฌดํ•œํžˆ ๋ฐ˜๋ณต์„ ํ†ตํ•ด ํ™•์ธ
         */
        while(1){
                len = sizeof(c_addr);
                c_socket = accept(s_socket, (struct sockaddr *) & c_addr, &len);

                length = 0;
                temp = rBuffer;
                while((n = read(c_socket, temp, 1)) > 0 ){
                        if(*temp == '\r') continue;
                        if(*temp == '\n') break;
                        if(*temp == '\0') break;            // ๋ฌธ์ž์—ด์˜ ๋๋‚  ๋•Œ๊นŒ์ง€ ์ฝ์–ด ๋“ค์ธ๋‹ค.

                        if(length == BUFSIZ) break;
                        temp++; length++;

                }
                rBuffer[length] = '\0';

                if(!strcmp(rBuffer, "print")) {
                        n = strlen(buffer);
                        write(c_socket, buffer, n);
                }
                close(c_socket);
        }
        close(s_socket);
}

hello_ext_client.c

#include<stdio.h>
#include<netinet/in.h>
#include<sys/socket.h>
#include<strings.h>
#include<string.h>

#define PORT 9005
#define IPADDR "127.0.0.1"

char buffer[BUFSIZ];

int main(){
        int c_socket;
        struct sockaddr_in c_addr;
        int len;

        char rcvBuffer[BUFSIZ];

        int n;

        c_socket = socket(PF_INET, SOCK_STREAM, 0);

        memset(&c_addr,0, sizeof(c_addr));
        c_addr.sin_addr.s_addr = inet_addr(IPADDR);
        c_addr.sin_family = AF_INET;
        c_addr.sin_port = htons(PORT);

        if(connect(c_socket, (struct sockaddr *) &c_addr, sizeof(c_addr)) == -1){
                printf("Can not connect\n");
                close(c_socket);
                return -1;
        }

        scanf("%s", buffer);
        buffer[strlen(buffer)] = '\0';
        write(c_socket, buffer, strlen(buffer)+1);

        if((n = read(c_socket, rcvBuffer, sizeof(rcvBuffer))) < 0){
                return (-1);
        }


        rcvBuffer[n] = '\0';
        printf("received Data : %s\n", rcvBuffer);

        close(c_socket);
}

๊ฒฐ๊ณผํ™”๋ฉด

image

'TIL (Today I Learned) > Network' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Network] HTTP2  (0) 2021.09.09
[Network] Wireshark  (0) 2021.09.08
[Network] tracert ์‚ฌ์šฉ๋ฒ•  (0) 2021.09.08
[tcp/ip]hello, world๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ์†Œ์ผ“ ํ”„๋กœ๊ทธ๋žจ  (0) 2021.08.07
LTE Network Element  (0) 2021.07.22