第三周:QEMU 网络
要求
学习文档中心QEMU网络视频教程。观看视频及文档,能够搭建 QEMU 的运行环境并成功运行文件系统;了解基本的网络概念,学会使用抓包工具分析数据包。
作业提交:第三周作业+姓名.zip
其中包含:
作业2的.c
作业3的.c
一个word文档写出几个作业的步骤、心得
作业1:
获取并运行文件系统相关示例程序,这可以在学习过程中进行。
作业2:
文件匹配: 有一系列文件如:1.txt, 12.txt, 123.txt,从中找出1.txt,并将文件内容输出出来。
作业3:(服务器开两周,注意做作业时间)
观看视频及文档,能够正常获取并运行示例程序,通过示例程序的学习能够掌握使用 Socket 进行网络编程的方法,能够实现一个简单的 TCP 聊天客户端
背景
在服务器 183.193.243.90 的 5000 端口 上运行了一个基于 TCP 的简单的聊天服务器。
- 当有 TCP 客户端连接上后,服务器会回复给客户端 Welcome to TestChat;
- 未使用 login 命令登录服务器之前,服务器收到任何信息只会回复 Please log in Use "login "
- 服务器端能够接收如下命令:
命令 | 说明 | 示例 | 服务器回复 |
---|---|---|---|
login | 登录聊天室 | login ID | 无 |
say | 说话 | say My name is Yqiu, I’m doing this job at 20180512. | ID :My name is Yqiu, I’m doing this job at 20180512. |
look | 查看聊天室有哪些人 | look | 所有ID |
who | 我是谁 | who | login ID |
logout | 退出 | logout | 无 |
其他 | Unknown Command |
服务器会把接受到的每条命令,发送给客户端。
如果服务器接受到错误命令,会发送给客户端 Unknown command 的字符串。
注意:每条命令必须以\r\n结束,服务器才能识别。
作业要求:
通过编程实现:
- 使用 login 命令登录上服务器聊天室,并将服务器返回的信息通过串口打印出来
- 使用 say 命令通知服务器你的个人姓名和作业时间 “My name is Yqiu, I’m doing this job at 20180730”,并将服务器返回的信息打印出来
- 使用 look 命令查看聊天室人员,并将服务器返回的信息打印出来
- 使用 who 命令查看我是谁,并将服务器返回的信息打印出来
- 使用 say 命令告诉服务器我看到有哪些人在聊天室
- 使用 say 命令告诉服务器我准备退出了
- 使用 logout 退出聊天室
练习题:
完成以下练习题:
1、若有宏定义:#define MOD(x,y) x%y
则执行以下语句后的输出结果是
int a=13,b=94;
printf("%d\n",MOD(b,a+4));
A.5
B.7
C.9
D.11
答案:B
2、若一个栈的输入序列是1,2,3,…,n,输出序列的第一个元素是n,则第i个输出元素是( )
A.n
B.n-i
C.n-i-1
D.n-i+1
答案:D
特例判断
3、以下程序输出结果为:
char* f(char *str, char ch) {
char *it1 = str;
char *it2 = str;
while (*it2 != '\0') {
while (*it2 == ch) { it2++; }
*it1++ = *it2++;
}
return str;
}
void main(int argc, char *argv[]) {
char *a = new char[10];
strcpy(a, "abcdcccd");
cout << f(a, 'c');
}
A.abdcccd
B.abdd
C.abcc
D.abddcccd
答案:D
4、编程:将一个正整数分解质因数。例如:输入90,打印出90=2 * 3 *3 *5。
#include "stdio.h"
int main(void){
int num=0,rel=0;
int buf[32]={0};
int i,j=0;
scanf("%d",&num);
for(i=2;i<=num;i++)
{
rel=num/i;
if(num ==(rel*i)) //因为存在类型截断,判断i是否是质因数
{
buf[j++] = i;
num=num/i; //更新num,缩小范围
i--;
}
}
for(i=0;i<j;i++)
printf("%d ",buf[i]);
return 0;
}
1.设栈 S 和队列 Q 的初始状态为空,元素 e1 、 e2 、 e3 、 e4 、 e5 和 e6 依次通过栈 S ,一个元素出栈后即进入队列 Q ,若 6 个元素出队的顺序是 e2 、 e4 、 e3 、 e6 、 e5 、和 e1 ,则栈 S 容量至少应该是
A.6
B.4
C.3
D.2
答案:C
1、以下有关IO接口或IO设备说法错误的是( )
A.GPIO一般有三态:0态 ,1态 ,高阻态
B.I2C只有两条信号线,在SCL为高电平,将SDA从高电平拉低后可以开始传输数据
C.SPI一般使用4线制,可以一主多从
D.UART是全双工串行异步通信,直接使用UART通信时,需要将信号相同的线相连。
答案:D
1、中断屏蔽器能屏蔽( )
(A)所有中断和异常 (B)除了NMI外所有异常和中断
(C)除了NMI、异常所有其他中断 (D)部分中断
答案:B
2.下列寄存器中,汇编语言程序员可见的是()。
A.存储器地址寄存器(MAR)
B.程序计数器(PC)
C.存储器数据寄存器(MDR)
D.指令寄存器(IR)
答案:B
3.以下各种情况中,属于死锁现象的是() 。
A.某进程执行了死循环
B.某进程为了得到某资源,等待了很长的时间
C.某进程为了得到某资源,等待了无限的时间
D.操作系统故障
答案:C
1、指出下面的 IP 地址中,哪个是 C 类地址 ( )
A.127 . 19 . 0 . 23
B.193 . 0 . 25 . 37
C.225 . 21 . 0 . 11
D.170 . 23 . 0 . 1
答案: