4.11 日期/时间的程序

来源:互联网 发布:兴业银行淘宝白金卡 编辑:程序博客网 时间:2024/05/21 17:14

服务器端的代码:

收到客户端连接请求后,输出客户端的地址,端口,同时将时间信息发送给客户端

#include <sys/socket.h>#include <stdio.h>#include <netinet/in.h>#include <arpa/inet.h>#include <errno.h>#include <string.h>#include <time.h>#include <unistd.h>#define SIN_PORT 9999#define BUFLEN 256int main(int argc, char **argv){    int listenfd, connfd;    struct sockaddr_in servaddr;    char buf[BUFLEN];    time_t ticks;    listenfd = socket(AF_INET, SOCK_STREAM, 0);    if (listenfd < 0) {        printf("socket error :%s\n", strerror(errno));                return -1;    }    servaddr.sin_family = AF_INET;    servaddr.sin_port = htons(SIN_PORT);    servaddr.sin_addr.s_addr = htonl(INADDR_ANY);            if (bind(listenfd, (struct sockaddr*)&servaddr, sizeof(servaddr)) < 0) {        printf("bind error:%s\n", strerror(errno));        close(listenfd);        return -1;    }            if (listen(listenfd, 3) < 0) {        printf("listen error:%s\n", strerror(errno));        close(listenfd);        return -1;    }            struct sockaddr_in clientaddr;    int len;    for (;;) {        len = sizeof(clientaddr);        connfd = accept(listenfd, (struct sockaddr*)&clientaddr, &len);        if (connfd < 0) {            printf("accept error:%s\n", strerror(errno));            close(listenfd);            return -1;        }        printf("connection from %s, port:%d\n", inet_ntop(AF_INET, &clientaddr.sin_addr, buf, sizeof(buf)), htons(clientaddr.sin_port));        ticks = time(NULL);        snprintf(buf, sizeof(buf), "%.24s\r\n", ctime(&ticks));        write(connfd, buf, strlen(buf));        close(connfd);    }    return 0;}


客户端的代码:

调用connect后,用getsockname输出内核分配给本地的地址及端口

#include <netinet/in.h>#include <stdio.h>#include <arpa/inet.h>#include <string.h>#include <errno.h>#include <unistd.h>#include <stdlib.h>#include <sys/socket.h>#define RECVLINE 128int main(int argc, char** argv){    int sockfd, n;    char buf[RECVLINE];    struct sockaddr_in servaddr;    if (argc != 2) {        printf("usage: a.out <IPADDRESS>\n");        return -1;    }        if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0) {        printf("error socket : %s\n", strerror(errno));        return -1;    }    servaddr.sin_family = AF_INET;    servaddr.sin_port = htons(13);   if (inet_pton(AF_INET, argv[1], &(servaddr.sin_addr)) <= 0) {       printf("error inet_pton: %s\n", strerror(errno));       close(sockfd);       return -1;    }   if (connect(sockfd, (struct sockaddr*)&servaddr, sizeof(servaddr)) < 0) {        printf("connect error: %s\n", strerror(errno));        close(sockfd);        return -1;   }    struct sockaddr_in tmp;    int len;    getsockname(sockfd, (struct sockaddr*)&tmp, &len);    printf("addr=%s, port=%d\n", inet_ntoa(tmp.sin_addr), ntohs(tmp.sin_port)) ;       int cnt = 0;    while ((n = read(sockfd, buf, RECVLINE)) > 0) {        buf[n] = 0;        cnt++;        if (fputs(buf, stdout) == EOF) {            printf("fputs error:%s\n", strerror(errno));            close(sockfd);            return -1;        }    }    //printf("cnt=%d n=%d\n", cnt, n);    if (n < 0) {        printf("read error:%s\n", strerror(errno));    }    exit(0);    return 0;}


0 0
原创粉丝点击