时间服务器客户端

//时间服务器
#include<stdio.h>
#include<stdlib.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<strings.h>
#include<string.h>
#include<netinet/in.h>
#include<time.h>
#define LISENQ 1024
#define MAXLINE 4096
/*服务器处理函数,返回当地时间*/

void str_cli(int sockfd)
{
    //time_t cur_time;//当前时间结构体
    //struct tm *cur_time1;
    char recvbuf[MAXLINE+1], sendbuf[MAXLINE];
    int n;
    time_t val;
    struct tm *time1;
    char buf[1024];

    memset(buf, 0, 1024);
    while((n = read(sockfd, recvbuf, MAXLINE)) > 0)
    {
        if(memcmp(recvbuf, "time", 4) == 0)
        {
            //cur_time = time((time_t*)0);
            //cur_time1 = gmtime(&cur_time);
            //sprintf(sendbuf, "%d", (*cur_time1).tm_hour);//时
            //sprintf(sendbuf+strlen(sendbuf), "%d", (*cur_time1).tm_min);//分
            //sprintf(sendbuf+strlen(sendbuf), "%d", (*cur_time1).tm_sec);//妙

            //=(struct tm*)malloc(sizeof(struct tm));
            //const time_t *val = (time_t*)malloc(sizeof(time_t));

            //time(val);
            (void)time(&val);
            time1 = localtime(&val);
            //sprintf(buf, "%ld", *val);
            //sprintf(buf, "%ld", val);
            sprintf(buf, "%d时", (*time1).tm_hour);
            sprintf(buf+strlen(buf), "%d分", (*time1).tm_min);
            sprintf(buf+strlen(buf), "%d秒", (*time1).tm_sec);
            printf("%s\n", buf);

//          printf("%ld\n", cur_time);
            //sprintf(sendbuf, "%s", &cur_time);
            //sprintf(sendbuf, "%d", cur_time); 
            //printf("%s\n", buf);
            //memset(sendbuf, 1, MAXLINE);
        //  for(n=0; n<100;n++)
            //  sendbuf[n] ='a';
            //write(sockfd, sendbuf, strlen(sendbuf));
            //write(sockfd, buf, strlen(buf));
            write(sockfd, buf, strlen(buf));
            //write(sockfd, "abc", 3);
        }
    }
}

int main()
{
    int listenfd, connfd;//监听套接字、已连接套接字
    struct sockaddr_in server_sockaddr, client_sockaddr;//本地套接字、客户端套接字
    socklen_t len;

    if((listenfd = socket(AF_INET, SOCK_STREAM, 0)) == -1)
    {
        fprintf(stderr, "socket failed\n");
        exit(EXIT_FAILURE);
    }
    else
        printf("socket success\n");

    bzero(&server_sockaddr, sizeof(server_sockaddr));
    server_sockaddr.sin_family = AF_INET;
    server_sockaddr.sin_port = htons(9877);
    server_sockaddr.sin_addr.s_addr = htonl(INADDR_ANY);//通配地址
    if(bind(listenfd, (struct sockaddr*)&server_sockaddr, sizeof(server_sockaddr)) < 0)
    {
        fprintf(stderr, "bind failed\n");
        exit(EXIT_FAILURE);
    }
    else
        printf("bind success\n");
    if(listen(listenfd, LISENQ) == -1)
    {
        fprintf(stderr, "listen failed\n");
        exit(EXIT_FAILURE);
    }
    else
        printf("listen success\n");

    while(1)
    {
        len = sizeof(client_sockaddr);
        connfd = accept(listenfd, (struct sockaddr*)&client_sockaddr, &len);
        if(fork() == 0)//子进程处理已经连接的套接字
        {
            close(listenfd);
            str_cli(connfd);
            close(connfd);
            exit(0);
        }
        close(connfd);
    }   
}
//一个简单的时间获取客户端程序
#include<stdio.h>
#include<stdlib.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<strings.h>
#include<arpa/inet.h>
#define MAXLINE 4096
int main(int argc, char **argv)
{
    int sockfd, n;
    struct sockaddr_in server_sockaddr;
    char recvbuf[MAXLINE+1];
    char commend[10];
    if((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1)
    {
        fprintf(stderr, "socket failed\n");
        exit(EXIT_FAILURE);
    }
    else
        fprintf(stderr,"socket success\n");

    bzero(&server_sockaddr, sizeof(server_sockaddr));
    server_sockaddr.sin_family = AF_INET;
    server_sockaddr.sin_port = htons(9877);//daytime server
    inet_pton(AF_INET, argv[1], &server_sockaddr.sin_addr);//表达式转地址

    if(connect(sockfd, (struct sockaddr*)&server_sockaddr, sizeof(server_sockaddr)) == -1)//连接服务器
    {
        fprintf(stderr, "Connect failed\n");
        exit(EXIT_FAILURE);
    }
    else
        printf("Connect success\n");

//  while((n = read(sockfd, recvbuf, MAXLINE)) > 0)
////    {
//      recvbuf[n] = 0;
//      if(fputs(recvbuf, stdout) == EOF)
//          printf("fputs error\n");
//  }
//  if(n < 0)
//      printf("read error\n");
    while(fgets(commend, 10, stdin) != NULL)
    {
        if(memcmp(commend, "time", 4) == 0)
        {
            write(sockfd, "time", 4);
            //sleep(1);
            if((n = read(sockfd, recvbuf, MAXLINE)) > 0)
            {
                recvbuf[n] = 0;
                fputs(recvbuf, stdout);
                printf("\n");
            }
            else if(n == 0)
            {
                fprintf(stderr, "server no \n");
                exit(EXIT_FAILURE);
            }
            else
            {
                printf("read failed\n");
                continue;
            }
        }
    }
    exit(EXIT_FAILURE);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值