zoukankan      html  css  js  c++  java
  • 课下作业和课上作业

    课下作业

    课上练习3

    要求

    基于socket 使用教材的csapp.h csapp.c,实现daytime(13)服务器(端口我们使用13+后三位学号)和客户端
    服务器响应消息格式是

    客户端IP:XXXX

    服务器实现者学号:

    当前时间: XX:XX:XX


    上方提交代码

    提交一个客户端至少查询三次时间的截图测试截图

    提交至少两个客户端查询时间的截图测试截图

    实现过程

    首先下载csapp.h和csapp.c,这两个在网上查的时候所给的网址无法打开,始终无法找到这两个文件,只能从同学的码云上下载了这两个文件。

    client

    service

    完成截图

    课下练习1

    要求

    1 完成家庭作业4.47,4.48,4.49

    2 相应代码反汇编成X86-64汇编

    3 把上述X86-64汇编翻译成Y86汇编,并给出相应机器码

    发操作过程、测试、问题解决过程博客链接

    完成过程

    首先把代码改成指针的类型:

    
            for(j=i;j<count;j++)
            {
                if(*(data+i)>*(data+j))
                {
                    int temp;
                    temp=*(data+i);
                    *(data+i)=*(data+j);
                    *(data+j)=temp;
                }
            }
        }
    }
    main()
    {
        long data[10];
        int i;
        printf("请输入数字:");
        for(i=0;i<10;i++)
            scanf("%d",&data[i]);
        bubble(&data,10);
        for(i=0;i<10;i++)
            printf("%d	",data[i]);
    }
    

    然后再输入
    1.gcc -S -o main.s main.c

    2.as -o main.o main.s

    3.objdump -d main.o
    就会出现x86-64的汇编代码

    下课练习2

    要求

    把课上练习3的daytime服务器分别用多进程和多线程实现成并发服务器并测试

    实现过程

    /* 
     * echoservert.c - A concurrent echo server using threads
     */
    /* $begin echoservertmain */
    #include "csapp.h"
    
    void echo(int connfd);
    void *thread(void *vargp);
    char *haddrp;
    
    int main(int argc, char **argv) 
    {
        int listenfd, *connfdp, port;
        socklen_t clientlen=sizeof(struct sockaddr_in);
        struct sockaddr_in clientaddr;
        pthread_t tid; 
    
        if (argc != 2) {
    	fprintf(stderr, "usage: %s <port>
    ", argv[0]);
    	exit(0);
        }
        port = atoi(argv[1]);
    
        listenfd = Open_listenfd(port);
        while (1) {
    	connfdp = Malloc(sizeof(int)); //line:conc:echoservert:beginmalloc
    	*connfdp = Accept(listenfd, (SA *) &clientaddr, &clientlen); //line:conc:echoservert:endmalloc
    	haddrp = inet_ntoa(clientaddr.sin_addr);
    	Pthread_create(&tid, NULL, thread, connfdp);
        }
    }
    
    /* thread routine */
    void *thread(void *vargp) 
    {  
        int connfd = *((int *)vargp);
        Pthread_detach(pthread_self()); //line:conc:echoservert:detach
        Free(vargp);                    //line:conc:echoservert:free
        echo(connfd);
        Close(connfd);
        return NULL;
    }
    /* $end echoservertmain */
    void echo(int connfd) 
    {
        static char timestr[40];  
        time_t t;  
        struct tm *nowtime;
        time(&t);  
        nowtime = localtime(&t);  
        strftime(timestr,sizeof(timestr),"%Y-%m-%d %H:%M:%S",nowtime);
        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
    ", (int)n);
    	printf("客户端IP:%s
    ",haddrp);
    	printf("服务器实现者学号:20155301
    ");
    	printf("当前时间:%s
    ",timestr);
    	printf("
    ");
    	Rio_writen(connfd, buf, n);
        }
    }
    

  • 相关阅读:
    ACTIVE OBJECT 模式
    Node.js
    WordPress — 突破性能瓶颈,使用 WordPress 站群做 SEO 推广
    HttpRequest.Item 属性 和 HttpRequest.QueryString 属性的区别!
    Regex.Replace 方法的性能!(090625最新修改)
    FACTORY 模式
    Indexof String By Byte[]
    [11]DIP:依赖倒置原则
    C#.Net Winform skin 皮肤 大全(转)
    C# 情缘
  • 原文地址:https://www.cnblogs.com/fengxingck/p/7822212.html
Copyright © 2011-2022 走看看