课下作业和课上作业

课下作业

课上练习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);
    }
}

原文地址:https://www.cnblogs.com/fengxingck/p/7822212.html