본문 바로가기
TCP/IP/리눅스기반

UDP 에코 서버 <리눅스기반>

by 꿀꿀이냐옹이 2009. 6. 30.
반응형
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include<arpa/inet.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<time.h>

#define BUFSIZE 1024

void error_handling(char* meg);

int main(int argc,char** argv)
{
        int ssock;
        char meg[BUFSIZE];

        int strl;

        struct sockaddr_in saddr;
        struct sockaddr_in caddr;

        int caddrl;

        time_t logint;
        struct tm* t;

        char* str;

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

        ssock=socket(PF_INET,SOCK_DGRAM,0);
        if(ssock==-1)
                error_handling("socket() error");

        memset(&saddr,0,sizeof(saddr));
        saddr.sin_family=AF_INET;
        saddr.sin_addr.s_addr=htonl(INADDR_ANY);
        saddr.sin_port=htons(atoi(argv[1]));

        if(bind(ssock,(struct sockaddr*)&saddr,sizeof(saddr))==-1)
                error_handling("bind() error");

        while(1)
        {
                caddrl=sizeof(caddr);
                strl=recvfrom(ssock,meg,BUFSIZE,0,(struct sockaddr*)&caddr,&caddrl);
                sendto(ssock,meg,strl,0,(struct sockaddr*)&caddr,sizeof(caddr));

                logint=time(NULL);
                t=localtime(&logint);

                str=inet_ntoa(caddr.sin_addr);

                printf("Client Address : %s\n",str);
                printf("Login time : %2d:%02d:%02d\n",t->tm_hour,t->tm_min,t->tm_sec);

        }

        close(ssock);

        return 0;

}

void error_handling(char* meg)
{
        fputs(meg,stderr);
        fputc('\n',stderr);
        exit(1);
}
반응형

'TCP/IP > 리눅스기반' 카테고리의 다른 글

UDP 에코 클라이언트<리눅스기반>  (0) 2009.06.30

댓글