zoukankan      html  css  js  c++  java
  • 第八周测试课下补交

    基于socket 使用教材的csapp.h csapp.c,实现daytime(13)服务器(端口我们使用13+后三位学号)和客户端
    服务器响应消息格式是
    客户端IP:XXXX
    服务器实现者学号:XXXXXXXX
    当前时间: XX:XX:XX
    上方提交代码
    提交一个客户端至少查询三次时间的截图测试截图
    提交至少两个客户端查询时间的截图测试截图
    • echoclient.c
    /*
     * echoclient.c - An echo client
     */
    /* $begin echoclientmain */
    #include "csapp.h"
    
    int main(int argc, char **argv) 
    {
        int clientfd, port;
        char *host, buf[MAXLINE];
        rio_t rio;
    
        if (argc != 3) {
    	fprintf(stderr, "usage: %s <host> <port>
    ", argv[0]);
    	exit(0);
        }
        host = argv[1];
        port = atoi(argv[2]);
    
        clientfd = Open_clientfd(host, port);
        Rio_readinitb(&rio, clientfd);
    
        while (Fgets(buf, MAXLINE, stdin) != NULL) {
    	Rio_writen(clientfd, buf, strlen(buf));
    	Rio_readlineb(&rio, buf, MAXLINE);
    	Fputs(buf, stdout);
        }
        Close(clientfd); //line:netp:echoclient:close
        exit(0);
    }
    /* $end echoclientmain */
    
    
    • echoserveri.c
    /*
     * echoserveri.c - An iterative echo server
     */
    /* $begin echoserverimain */
    #include "csapp.h"
    
    void echo(int connfd);
    
    int main(int argc, char **argv)
    {
        int listenfd, connfd, port, clientlen;
        struct sockaddr_in clientaddr;
        struct hostent *hp;
        char *haddrp;
        if (argc != 2) {
    	fprintf(stderr, "usage: %s <port>
    ", argv[0]);
    	exit(0);
        }
        port = atoi(argv[1]);
    
        listenfd = Open_listenfd(port);
        while (1) {
    	clientlen = sizeof(clientaddr);
    	connfd = Accept(listenfd, (SA *)&clientaddr, &clientlen);
    
    	/* determine the domain name and IP address of the client */
    	hp = Gethostbyaddr((const char *)&clientaddr.sin_addr.s_addr,
    			   sizeof(clientaddr.sin_addr.s_addr), AF_INET);
    	haddrp = inet_ntoa(clientaddr.sin_addr);
    	printf("server connected to %s (%s)
    ", hp->h_name, haddrp);
    
    	echo(connfd);
    	Close(connfd);
        }
        exit(0);
    }
    /*
     * echo - read and echo text lines until client closes connection
     */
    /* $begin echo */
    #include "csapp.h"
    
    void echo(int connfd)
    {
    time_t t;
        struct tm * lt;
    	size_t n;
        char buf[MAXLINE];
        rio_t rio;
    
        Rio_readinitb(&rio, connfd);
        while((n = Rio_readlineb(&rio, buf, MAXLINE)) != 0) { //line:netp:echo:eof
    	 printf("server received %d bytes
    ", n);
        printf("服务器实现者学号:20175206
    ");
        time (&t);
        lt = gmtime (&t);
        printf ("当前时间为:%d/%d/%d %d:%d:%d
    ",lt->tm_year+1900, lt->tm_mon+1, lt->tm_mday, lt->tm_hour, lt->tm_min, lt->tm_sec);
    	Rio_writen(connfd, buf, n);
        }
    }
    /* $end echo */
    /* $end echoserverimain */
    
    
    • 单客户端多发

    • 多客户端多发

    • ps注意事项:
      要使用以下的代码进行线程编译
      gcc echoserveri.c -o server -lpthread
      gcc echoclient.c -o client -lpthread
      运行时输入13+学号后三位
      ./server 13206
      ./client 127.0.0.1 13206

    电脑在课上没电了,于是在课下进行补交。

  • 相关阅读:
    算法导论--平摊分析之聚集分析
    编译器开发系列--Ocelot语言3.类型名称的消解
    编译器开发系列--Ocelot语言2.变量引用的消解
    编译器开发系列--Ocelot语言1.抽象语法树
    算法导论--散列表的数学分析(精解)链表法
    Linux2.6内核协议栈系列--TCP协议2.接收
    日常‘说说’(回归 原森雨)
    那些玩枪战我特别想听到的声音!
    友链!
    晚安背后的秘密
  • 原文地址:https://www.cnblogs.com/ldc175206/p/11944170.html
Copyright © 2011-2022 走看看