엔지니어가 되고 싶은 공돌이

11. TCP 본문

Computer Science/Unix

11. TCP

Geca 2025. 3. 18. 14:51

 

11. 1. Server TCP Socket

#include<stdio.h> 
#include<stdlib.h> 
#include<sys/types.h> 
#include<netinet/in.h> 
#include<inttypes.h>
#include<sys/socket.h> 
#include<arpa/inet.h> 
#include<string.h> 
#include<unistd.h>

#define PORTNUM 1234

int main(void){
    char buf[256];
    struct sockaddr_in sin, cli;
    int sd, ns, clientlen = sizeof(cli);

    if((sd = socket(AF_INET, SOCK_STREAM, 0)) == -1){
        perror("socket");
        exit(1);
    }
    
    memset((char *)&sin, '\0', sizeof(sin));
    sin.sin_family = AF_INET;
    sin.sin_port = htons(PORTNUM);
    sin.sin_addr.s_addr = inet_addr("0.0.0.0"); // 0.0.0.0은 모든 IP로부터의 요청을 받는다는 뜻.

    if(bind(sd, (struct sockaddr *)&sin, sizeof(sin))){
        perror("bind");
        exit(1);
    }

    if(listen(sd, 5)){ // 클라이언트 접속요청 대기
        perror("listen");
        exit(1);
    }
    
    if((ns = accept(sd, (struct sockaddr *)&cli, &clientlen)) == -1){ // 클라이언트와 연결
        perror("accept");
        exit(1);
    }

    sprintf(buf, "Your IP address is %s", inet_ntoa(cli.sin_addr));
    
    if(send(ns, buf, strlen(buf)+1, 0)==-1){
        perror("send");
        exit(1);
    }
    
    close(ns);
    close(sd);

    return 0;
}

 


11. 2. Client TCP Socket

#include<stdio.h> 
#include<stdlib.h> 
#include<sys/types.h> 
#include<netinet/in.h> 
#include<inttypes.h>
#include<sys/socket.h> 
#include<arpa/inet.h> 
#include<string.h> 
#include<unistd.h>
#define PORTNUM 1234

int main(void){
    int sd;
    char buf[256];
    struct sockaddr_in sin;

    if((sd = socket(AF_INET, SOCK_STREAM, 0)) == -1){
        perror("socket");
        exit(1);
    }

    memset((char *)&sin, '\0', sizeof(sin));
    sin.sin_family=AF_INET;
    sin.sin_port = htons(PORTNUM);
    sin.sin_addr.s_addr = inet_addr("0.0.0.0"); // 정확한 포트명 입력하기

    if(connect(sd, (struct sockaddr *) &sin, sizeof(sin))){ // 서버에 접속 요청.
        perror("connect");
        exit(1);
    }

    if(recv(sd, buf, sizeof(buf), 0) == -1){
        perror("recv");
        exit(1);
    }
    
    close(sd);
    
    printf("From Server : %s\n", buf);

    return 0;
}

 

 


'Computer Science > Unix' 카테고리의 다른 글

12. UDP  (0) 2025.03.18
10. Socket  (0) 2025.03.17
09. Thread  (0) 2025.03.16
08. Fork and Exec  (0) 2025.03.15
07. Process  (0) 2025.03.14
Comments