반응형
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
반응형