반응형

에코

  • 표준 인터넷 서비스
  • well-known 포트 7번을 통해 제공
  • 클라이언트가 보낸 문자열을 다시 클라이언트로 전송

 

사용 예제

// -----------------------------------
// 파일명:tcp_echocli.c
// 기 능 :에코 서비스를 요청하는 TCP(연결형) 클라이언트
// 컴파일:gcc tcp_echocli.c -o tcp_echocli
// 사용법:./tvp_echocli IP Address
// -----------------------------------

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

#define MAXLINE 127

int main(int argc, char *argv[]){
    struct sockaddr_in servaddr;
    int s, nbyte;
    char buf[MAXLINE+1];

    if(argc != 2){
        printf("Usage : %s ip_address\n", argv[0]);
        exit(0);
    }

    if((s=socket(PF_INET, SOCK_STREAM, 0)) < 0){
        perror("socket fail");
        exit(0);
    }

    // 에코 서버의 소켓주소 구조체 작성
    bzero((char *)&servaddr, sizeof(servaddr));
    servaddr.sin_family = AF_INET;
    inet_pton(AF_INET, argv[1], &servaddr.sin_addr);
    servaddr.sin_port = htons(7);

    // 연결 요청
    if(connect(s, (struct sockaddr *)&servaddr, sizeof(servaddr)) < 0){
        perror("connect fail");
       exit(0);
    }

    printf("입력: ");
    if(fgets(buf, sizeof(buf), stdin) == NULL) exit(0);
    nbyte = strlen(buf);

    // 에코 서버로 메시지 송진
    if(write(s, buf, nbyte) < 0){
        printf("write error\n");
        exit(0);
    }

    // 수신된 에코 데이터 화면 출력
    printf("수신: ");
    if((nbyte=read(s, buf, MAXLINE)) < 0){
        perror("read fail");
        exit(0);
    }
    buf[nbyte] = 0;
    printf("%s", buf);
    close(s);
    
    return 0;
}

 

실행 결과
$tcp_echo 127.0.0.1
입력: abcdefghijklmn
수신: abcdefghijklmn

 

반응형