TIL (Today I Learned)/Network

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

loki d 2021. 8. 7. 16:18
728x90

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

  • ์†Œ์ผ“ ํ”„๋กœ๊ทธ๋žจ ๊ตฌ์„ฑ
    • ์„œ๋น„์Šค๋ฅผ ์š”์ฒญํ•˜๋Š” ํด๋ผ์ด์–ธํŠธ ์ธก
    • ํด๋ผ์ด์–ธํŠธ๋กœ๋ถ€ํ„ฐ์˜ ์š”์ฒญ์„ ๋ฐ›์•„ ์„œ๋น„์Šคํ•˜๋Š” ์„œ๋ฒ„ ์ธก
  • ํด๋ผ์ด์–ธํŠธ ํ”„๋กœ๊ทธ๋žจ์ด ๋„คํŠธ์›Œํฌ์‚ฌ์—ฅ์„œ ํ†ต์‹  ์ฑ„๋„์„ ํ†ตํ•ด ์„œ๋ฒ„์ธก์— ์—ฐ๊ฒฐ๋˜๋ฉด ์„œ๋ฒ„ ํ”„๋กœ๊ทธ๋žจ์€ ์ฆ‰์‹œ ๋ฌธ์ž์—ด hello, world๋ฅผ ํด๋ผ์ด์–ธํŠธ ์ธก์— ์ „์†ก
  • ํด๋ผ์ด์–ธํŠธ ํ”„๋กœ๊ทธ๋žจ์€ ์ „์†ก๋ฐ›์€ ๋ฌธ์ž์—ด์„ ํ™”๋ฉด์— ์ถœ๋ ฅํ•œ๋‹ค.
    image
  1. ์—ฐ๊ฒฐ์š”์ฒญ : ํด๋ผ์ด์–ธํŠธ ํ”„๋กœ๊ทธ๋žจ์€ ์†Œ์ผ“ API ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์„œ๋ฒ„ ํ”„๋กœ๊ทธ๋žจ์— ์—ฐ๊ฒฐ์„ ์š”์ฒญํ•œ๋‹ค.
  2. ๋ฌธ์ž์—ด ์ „์†ก : ์—ฐ๊ฒฐ ์š”์ฒญ์„ ๋ฐ›์€ ์„œ๋ฒ„ ํ”„๋กœ๊ทธ๋žจ์€ ํด๋ผ์ด์–ธํŠธ ํ”„๋กœ๊ทธ๋žจ๊ณผ ์—ฐ๊ฒฐ๋˜์ž๋งˆ์ž ๋ฌธ์ž์—ด hello, world๋ฅผ ํด๋ผ์ด์–ธํŠธ์ธก์— ์ „์†กํ•œ๋‹ค.
  3. ํ™”๋ฉด ์ถœ๋ ฅ : ํด๋ผ์ด์–ธํŠธ ํ”„๋กœ๊ทธ๋žจ์€ ์ „์†ก๋ฐ›์€ ๋ฌธ์ž์—ด (helo, world)๋ฅผ ์ž์‹ ์˜ ํ™”๋ฉด์— ์ถœ๋ ฅํ•œ๋‹ค.
  4. hello_server.c
 #include<stdio.h>
 #include<string.h>
 #include<netinet/in.h>
 #include<sys/socket.h>
 #define PORT 9001



char buffer\[BUFSIZ\] = "hello, wolrd";

int main()  
{  
int c\_socket, s\_socket;  
struct sockaddr\_in s\_addr, c\_addr;  
int len;  
int n;

   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);
            n = strlen(buffer);
            write(c_socket, buffer, n);
            close(c_socket);
    }
    close(s_socket);

}

hello_client.c

  • ์„œ๋ฒ„ ํ”„๋กœ๊ทธ๋žจ์— ์—ฐ๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋„คํŠธ์›Œํฌ ์—ฐ๊ฒฐ ์žฅ์น˜์ธ ์†Œ์ผ“์„ ์ƒ์„ฑํ•ด์•ผ ํ•˜๊ณ , ์‚ฌ์ „์— ์„œ๋ฒ„์˜ IP์ฃผ์†Œ์™€ ์„œ๋ฒ„์˜ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ด ๊ฒฐ๋œ ํฌํŠธ ๋ฒˆํ˜ธ๋ฅผ ์•Œ์•„์•ผํ•œ๋‹ค.
  • ํด๋ผ์ด์–ธํŠธ ํ”„๋กœ๊ทธ๋žจ์„ ๊ตฌํ˜„ํ•œ ์ฝ”๋“œ (socket, connect, read ๋“ฑ์˜ ์†Œ์ผ“ ๊ด€๋ จ API ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉ)
#include<stdio.h>
#include <netinet/in.h>
#include <string.h>
#include <sys/socket.h>

#define PORT 9001
#define IPADDR "127.0.0.1"

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

        char rcvBuffer[BUFSIZ];

        c_socket = socket(PF_INET, SOCK_STREAM, 0);                     // TCP์šฉ ์†Œ์ผ“์„ ์ƒ์„ฑ

        memset(&c_addr, 0, sizeof(c_addr));                             // ์—ฐ๊ฒฐํ•  ์„œ๋ฒ„์˜ ์ฃผ์†Œ๋ฅผ ๊ตฌ์กฐ์ฒด ๋ณ€์ˆ˜ c_addr์— ์„ค์ •
        c_addr.sin_addr.s_addr = inet_addr(IPADDR);                     // ์—ฐ๊ฒฐํ•  ์„œ๋ฒ„์˜ ์ฃผ์†Œ๋Š” 127.0.0.1(์ž์‹ )์œผ๋กœ
        c_addr.sin_family = AF_INET;
        c_addr.sin_port = htons(PORT);                                  // ํฌํŠธ ๋ฒˆํ˜ธ๋Š” 9000๋ฒˆ์œผ๋กœ ์„ค์ • 

        if(connect(c_socket, (struct sockaddr *) &c_addr, sizeof(c_addr)) == -1){ // ์†Œ์ผ“์„ ์„œ๋ฒ„์— ์—ฐ๊ฒฐ
                printf("Can not connect\n");
                close(c_socket);
                return -1;
        }

        /* ์„œ๋น„์Šค ์š”์ฒญ๊ณผ ์ฒ˜๋ฆฌ
         * ์„œ๋ฒ„์™€ ์—ฐ๊ฒฐ๋œ ํ†ต์‹  ์ฑ„๋„์„ ํ†ตํ•ด ์ž๋ฃŒ๋ฅผ ์†ก์ˆ˜์‹ ํ•˜๋ฉด์„œ ์„œ๋น„์Šค๋ฅผ ์ฒ˜๋ฆฌํ•œ๋‹ค. 
        */
        if((n = read(c_socket, rcvBuffer, sizeof(rcvBuffer))) < 0){
                printf("here");
                return (-1);
        }

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

        close(c_socket);
}

์†Œ์ผ“์„ ์„œ๋ฒ„์— ์—ฐ๊ฒฐ

image

  • ์„œ๋ฒ„์™€์˜ ์—ฐ๊ฒฐ์€ ์ปค๋„ ๋‚ด๋ถ€์—์„œ 3๋ฐฉํ–ฅ ํ•ธ๋“œ์…ฐ์ดํ‚น์„ ๊ฑฐ์ณ ์ด๋ฃจ์–ด์ง„๋‹ค. ์•ž์„œ ์„œ๋ฒ„์—์„œ๋Š” ์„œ๋ฒ„ ํ”„๋กœ๊ทธ๋žจ์—์„œ ํด๋ผ์ด์–ธํŠธ์˜ ์—ฐ๊ฒฐ ์š”์ฒญ์„ ๋ฐ›์„ ์„œ๋ฒ„ ๋‚ด ํฌํŠธ ๋ฒˆํ˜ธ (9001๋ฒˆ ํฌํŠธ)๋ฅผ ๊ฒฐ์ •
  • ํด๋ผ์ด์–ธํŠธ์—์„œ๋Š” ํด๋ผ์ด์–ธํŠธ์˜ ์ปค๋„์—์„œ ์„œ๋ฒ„ ์—ฐ๊ฒฐ์— ์‚ฌ์šฉํ•  ํฌํŠธ(๊ทธ๋ฆผ์—์„œ๋Š” 2345๋ฒˆ ํฌํŠธ)๋ฅผ ๊ฒฐ์ •ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํด๋ผ์ด์–ธํŠธ ํ”„๋กœ๊ทธ๋žจ์—์„œ๋Š” ํฌํŠธ๋ฒˆํ˜ธ๋ฅผ ํŠน๋ณ„ํžˆ ์ง€์ •ํ•˜์ง€ ์•Š๋Š”๋‹ค.

์‹คํ–‰ ํ™”๋ฉด

image