
作业社区
探索学习新天地,共享知识资源!
浪潮君 的学生作业:
space.h #ifndef SPACE_H #define SPACE_H namespace A_Space { int calc(int a, int b); // 加法 } namespace B_Space { int calc(int a, int b); // 减法 } #endif a.cpp #include "space.h" namespace A_Space { int calc(int a, int b) { return a + b; } } b.cpp #include "space.h" namespace B_Space { int calc(int a, int b) { return a - b; } } main.cpp #include #include "space.h" int main() { int x = 10, y = 5; std::cout





浪潮君 的学生作业:
#include // 引入标准输入输出头文件,用于 printf、fprintf 等函数 #include // 引入标准库头文件,用于 atoi() 等函数 #include // 引入网络字节序转换相关函数头文件,如 inet_aton, htons, ntohs 等 int main(int argc, char *argv[]) { // 判断命令行参数数量是否正确,应为程序名 + IP + 端口,共 3 个参数 if (argc != 3) { fprintf(stderr, "Usage: %s \n", argv[0]); // 使用说明 return 1; // 参数错误,返回非0表示程序失败 } // 1. IP 字符串转为网络字节序的 struct in_addr 结构体 struct in_addr ip_addr; // 用于存储网络字节序格式的 IPv4 地址 if (!inet_aton(argv[1], &ip_addr)) { // 将字符串 IP 转换为网络字节序存入 ip_addr fprintf(stderr, "Invalid IP address\n"); // 转换失败,提示错误 return 1; } // 2. 字符串端口转数字(atoi)并转换为网络字节序(htons) uint16_t port_net = htons(atoi(argv[2])); // 字符串转为整数,然后转换为大端格式 // 3. 输出网络字节序(原始格式,不适合人直接阅读) printf("Network Byte Order:\n"); printf(" IP: 0x%x\n", ip_addr.s_addr); // IP 输出为16进制的大端整数 printf(" Port: %u\n", port_net); // 端口以整数形式输出(实际是大端格式) // 4. 转回主机字节序并输出可读格式 printf("Host Byte Order:\n"); printf(" IP: %s\n", inet_ntoa(ip_addr)); // 将 IP 地址结构体转换为可读的字符串 printf(" Port: %u\n", ntohs(port_net)); // 将端口号从网络字节序还原为主机字节序 return 0; // 正常退出 }





Linkus 的学生作业:
#include #include #include #include #include static int number = 0;//共享变量 static pthread_mutex_t mtx = PTHREAD_MUTEX_INITIALIZER; static pthread_cond_t cond = PTHREAD_COND_INITIALIZER; void *thread_handler(void *arg) { int cnt = atoi((char *)arg); int i,tmp; for(i = 0;i < cnt;i++){ pthread_mutex_lock(&mtx); printf("线程 [%ld] 生产一个产品,产品数量为:%d\n",pthread_self(),++number); pthread_mutex_unlock(&mtx); pthread_cond_signal(&cond); // 唤醒消费者线程 } pthread_exit((void *)0); } int main(int argc,char *argv[]) { pthread_t tid; int i; int err; int total_of_produce = 0;//总的生产产品的数量 int total_of_consume = 0;//总的消费产品的数量 bool done = false; for (i = 1;i < argc;i++){ total_of_produce += atoi(argv[i]); // 生产数量的总和 err = pthread_create(&tid,NULL,thread_handler,(void *)argv[i]); if (err != 0){ perror("[ERROR] pthread_create(): "); exit(EXIT_FAILURE); } } for (;;){ pthread_mutex_lock(&mtx); while(number == 0) // 当产品数量为 0时,让线程阻塞,并释放锁,这里一般设置循环,防止没有重新获取到锁 pthread_cond_wait(&cond,&mtx); while(number > 0){ total_of_consume++; // 消费产品总数 printf("消费一个产品,产品数量为:%d\n",--number); done = total_of_consume >= total_of_produce; // 判断消费者数量与产品数量 } pthread_mutex_unlock(&mtx); // 消费者消费完成之后,释放锁 if (done) break; }





浪潮君 的学生作业:
HTTPS: 访问网页时使用的加密通信协议,保护数据在传输过程中不被窃听或篡改。DNS 用于将用户输入的网址转换为服务器的 IP 地址,从而实现网站访问。 SMTP: 负责把邮件从客户端发送到邮件服务器或其他邮件服务器。IMAP 允许用户从多个设备访问和管理保存在服务器上的邮件。 FTP: 用于在客户端和服务器之间传输文件,常用于网站文件上传。SSH 是一种加密的远程登录协议,安全地控制远程服务器。 DHCP: 自动为设备分配 IP 地址,简化网络接入配置。Telnet 也是远程登录协议,但不加密,安全性差,已基本被 SSH 替代。





浪潮君 的学生作业:
seq(序列号):表示当前发送的数据流中的字节序号,用于确保数据顺序和重组。理解为“数据包编号”,告诉对方“我这是第几个包”。 ack(确认好):表示期望接收的下一个字节序号,确认对方已经收到的数据。理解为“收到信号”,告诉对方“你发到这里我收到了,下一个包该发哪个”。 ACK(标识位):用于标识这是一个确认报文,表示确认号有效。无该标志确认号不生效。通常 ACK=1 表示确认包。 SYN(同步标志):用于建立连接的同步序列号,开启 TCP 三次握手过程。相当于“握手请求”,告诉对方“我想建立连接”。 FIN(结束标志):用于关闭连接,表示发送方已经没有数据发送了。相当于“结束信号”,告诉对方“我这边数据发送完了,可以断开了”。





沫颖 的学生作业:
space.h #ifndef __SPACE_H__ #define __SPACE_H__ namespace A_Space { int calc(int a, int b); } namespace B_Space { int calc(int a, int b); } #endif a.cpp #include "space.h" namespace A_Space { int calc(int a, int b) { return a + b; } } b.cpp #include "space.h" namespace B_Space { int calc(int a, int b) { return a - b; } } main.cpp #include #include "space.h" int main(void) { int a = 10, b = 40; std::cout




