用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字
云代码 - c代码库

Linux中时间服务器端代码

2014-06-03 作者: 洋葱码农举报

[c]代码库

/* timeserv.c - a socket-based time of day server
 */
 
#include  <stdio.h>
#include  <unistd.h>
#include  <sys/types.h>
#include  <sys/socket.h>
#include  <netinet/in.h>
#include  <netdb.h>
#include  <time.h>
#include  <strings.h>
 
#define   PORTNUM  13000   /* our time service phone number */
#define   HOSTLEN  256
#define   oops(msg)      { perror(msg) ; exit(1) ; }
 
int main(int ac, char *av[])
{
    struct  sockaddr_in   saddr;   /* build our address here */
    struct  hostent     *hp;   /* this is part of our    */
    char    hostname[HOSTLEN];     /* address            */
    int sock_id,sock_fd;       /* line id, file desc     */
    FILE    *sock_fp;              /* use socket as stream   */
    char    *ctime();              /* convert secs to string */
    time_t  thetime;               /* the time we report     */
 
      /*
       * Step 1: ask kernel for a socket
       */
 
    sock_id = socket( PF_INET, SOCK_STREAM, 0 );    /* get a socket */
    if ( sock_id == -1 )
        oops( "socket" );
 
      /*
       * Step 2: bind address to socket.  Address is host,port
       */
 
    bzero( (void *)&saddr, sizeof(saddr) ); /* clear out struct     */
 
    gethostname( hostname, HOSTLEN );       /* where am I ?         */
    hp = gethostbyname( hostname );         /* get info about host  */
                                            /* fill in host part    */
    bcopy( (void *)hp->h_addr, (void *)&saddr.sin_addr, hp->h_length);
    saddr.sin_port = htons(PORTNUM);        /* fill in socket port  */
    saddr.sin_family = AF_INET ;            /* fill in addr family  */
 
    if ( bind(sock_id, (struct sockaddr *)&saddr, sizeof(saddr)) != 0 )
           oops( "bind" );
 
      /*
       * Step 3: allow incoming calls with Qsize=1 on socket
       */
 
    if ( listen(sock_id, 1) != 0 )
        oops( "listen" );
 
      /*
       * main loop: accept(), write(), close()
       */
 
    while ( 1 ){
           sock_fd = accept(sock_id, NULL, NULL); /* wait for call */
        printf("Wow! got a call!\n");
           if ( sock_fd == -1 )
               oops( "accept" );       /* error getting calls  */
 
           sock_fp = fdopen(sock_fd,"w");  /* we'll write to the   */
           if ( sock_fp == NULL )          /* socket as a stream   */
               oops( "fdopen" );       /* unless we can't      */
 
           thetime = time(NULL);           /* get time             */
                           /* and convert to strng */
           fprintf( sock_fp, "The time here is .." );
           fprintf( sock_fp, "%s", ctime(&thetime) );
           fclose( sock_fp );              /* release connection   */
    }
}


网友评论    (发表评论)


发表评论:

评论须知:

  • 1、评论每次加2分,每天上限为30;
  • 2、请文明用语,共同创建干净的技术交流环境;
  • 3、若被发现提交非法信息,评论将会被删除,并且给予扣分处理,严重者给予封号处理;
  • 4、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。


扫码下载

加载中,请稍后...

输入口令后可复制整站源码

加载中,请稍后...