반응형

daytime 서비스를 제공해 줄 서버의 dotted decimal IP주소를 명령문 인자로 주면 오늘 날짜와 현재 시각을 리턴하는 코드를 짜보겠습니다.

 

예제

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

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

#define MAXLINE 127

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

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

    // 소켓 생성
    if((s=socket(PF_INET, SOCK_STREAM, 0)) < 0){
        perror("socket fail");
        exit(1);
    }

    // 서버의 소켓주소 구조체 servaddr을 '\0'으로 초기화
    bzero((char *)&servaddr, sizeof(servaddr));

    //servaddr의 주소지정
    servaddr.sin_family = AF_INET;
    inet_pton(AF_INET, argv[1], &servaddr.sin_addr);
    servaddr.sin_port = hton(13);

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

    // 서버가 보내오는 daytime 데이터의 수신 및 화면 출력
    if((nbyte=read(s, buf, MAXLINE)) < 0){
    perror("read fail");
    	exit(1);
    }
    buf[nbyte] = 0;
    printf("%s", buf);
    close(s);
    return 0;
}

 

결과물

$mydaytime 127.0.0.1
Thu Jun 20 13:43:00 2024

 


 

내 결과물

$./mydaytime 127.0.0.1
connect fail : Connection refused

 

 

사용 Port 확인 법

$cat /etc/services | grep daytime

결과물
daytime     13/tcp
daytime     13/udp

 

반응형