为了账号安全,请及时绑定邮箱和手机立即绑定

作业社区

探索学习新天地,共享知识资源!

0 提交作业
0 布置作业
0 满分作业
得分 100
学习任务

胡汉三66 的学生作业:

tcp_client.c #include #include #include #include // bzore() #include // close() #include #include #include #include // TCP客户端连接 // ./a.out ip port int main(int argc, const char *argv[]) { int sfd,ret; ssize_t sbytes = 0, rbytes = 0; char buffer[1024] = {0}; struct sockaddr_in svr_addr; if(argc != 3){ fprintf(stderr,"Usage : %s < ip > < port >.\n",argv[0]); exit(EXIT_FAILURE); } // 1.创建套接字 sfd = socket(AF_INET,SOCK_STREAM,0); if(sfd == -1){ perror("[ERROR] Failed to socket."); exit(EXIT_FAILURE); } printf("sfd = %d\n",sfd); // 2.建立连接 bzero(&svr_addr,sizeof(struct sockaddr_in)); // 指针指向空间初始化(清零) svr_addr.sin_family = AF_INET; // 协议族 svr_addr.sin_port = htons(atoi(argv[2])); // 端口 svr_addr.sin_addr.s_addr = inet_addr(argv[1]); // IP ret = connect(sfd,(const struct sockaddr *)&svr_addr,sizeof(struct sockaddr_in)); // 客户端 连接 服务器 if(ret == -1){ perror("[ERROR] Failed to connect."); exit(EXIT_FAILURE); } for(;;){ // 循环输入发送 // 输入数据 putchar('>'); memset(buffer,0,sizeof(buffer)); fgets(buffer,sizeof(buffer),stdin); // 3.发送数据 (客户端-->服务器) sbytes = send(sfd,buffer,strlen(buffer) + 1,0); // "+1" ---> "\0" if(ret == -1){ perror("[ERROR] Failed to send."); exit(EXIT_FAILURE); } if(strncmp(buffer,"quit",4) == 0) break; // 4.接收数据 (服务器--->客户端) bzero(buffer,sizeof(buffer)); // 指针指向空间初始化(清零) rbytes = recv(sfd,buffer,sizeof(buffer),0); // "+1" ---> "\0" if(ret == -1){ perror("[ERROR] Failed to recv."); exit(EXIT_FAILURE); }else if(rbytes > 0){ printf("buffer : %s\n",buffer); }else if(rbytes == 0){ printf("The server has been shut down.\n"); } } close(sfd); // 关闭 文件描述符 return 0; } tcp_server.c #include #include #include #include // bzore() #include // close() #include #include #include #include #define BACKLOG 10 // 监听队列最大值 // TCP服务器连接 // ./a.out ip port int main(int argc, const char *argv[]) { int sfd,ret,cfd; struct sockaddr_in svr_addr,cli_addr; ssize_t rbytes = 0,sbytes = 0; char buffer[1024] = {0}; socklen_t len = sizeof(struct sockaddr_in); if(argc != 3){ fprintf(stderr,"Usage : %s < ip > < port >.\n",argv[0]); exit(EXIT_FAILURE); } // 1.创建套接字 sfd = socket(AF_INET,SOCK_STREAM,0); if(sfd == -1){ perror("[ERROR] Failed to socket."); exit(EXIT_FAILURE); } printf("sfd = %d\n",sfd); bzero(&svr_addr,sizeof(struct sockaddr_in)); // 指针指向空间初始化(清零) svr_addr.sin_family = AF_INET; // 协议族 svr_addr.sin_port = htons(atoi(argv[2])); // 端口 svr_addr.sin_addr.s_addr = inet_addr(argv[1]); // IP // 2.绑定ip地址与端口号 ret = bind(sfd,(const struct sockaddr *)&svr_addr,sizeof(struct sockaddr_in)); if(ret == -1){ perror("[ERROR] Failed to bind."); exit(EXIT_FAILURE); } // 3.建立监听队列 ret = listen(sfd,BACKLOG); if(ret == -1){ perror("[ERROR] Failed to listen."); exit(EXIT_FAILURE); } // 4.建立连接,并产生新的客户端用于数据收发 cfd = accept(sfd,(struct sockaddr *)&cli_addr,&len); if(cfd == -1){ perror("[ERROR] Failed to accept."); exit(EXIT_FAILURE); } printf("ip : %s port : %d\n",inet_ntoa(cli_addr.sin_addr),ntohs(cli_addr.sin_port)); for(;;){ memset(buffer,0,sizeof(buffer)); // 清空 rbytes = recv(cfd,buffer,sizeof(buffer),0); if(rbytes == -1){ perror("[ERROR] Failed to recv."); exit(EXIT_FAILURE); }else if(rbytes > 0){ // 如果收到数据 // 如果输入是"quit",则退出 if(strncmp(buffer,"quit",4) == 0) break; // 将接收到的 客户端数据 回传给 客户端 sbytes = send(cfd,buffer,sizeof(buffer),0); if(sbytes == -1){ perror("[ERROR] Failed to recv."); exit(EXIT_FAILURE); } }else if(rbytes == 0){ printf("The client has been shutdown.\n"); break; } } close(sfd); // 关闭 文件描述符 close(cfd); return 0; } 【图片】

得分 100
学习任务

胡汉三66 的学生作业:

#include #include #include #include // bzore() #include // close() #include #include #include #include #define BACKLOG 10 // 监听队列最大值 // TCP服务器连接 // ./a.out ip port int main(int argc, const char *argv[]) { int sfd,ret,cfd; struct sockaddr_in svr_addr,cli_addr; socklen_t len = sizeof(struct sockaddr_in); if(argc != 3){ fprintf(stderr,"Usage : %s < ip > < port >.\n",argv[0]); exit(EXIT_FAILURE); } // 1.创建套接字 sfd = socket(AF_INET,SOCK_STREAM,0); if(sfd == -1){ perror("[ERROR] Failed to socket."); exit(EXIT_FAILURE); } printf("sfd = %d\n",sfd); bzero(&svr_addr,sizeof(struct sockaddr_in)); // 指针指向空间初始化(清零) svr_addr.sin_family = AF_INET; // 协议族 svr_addr.sin_port = htons(atoi(argv[2])); // 端口 svr_addr.sin_addr.s_addr = inet_addr(argv[1]); // IP // 2.绑定ip地址与端口号 ret = bind(sfd,(const struct sockaddr *)&svr_addr,sizeof(struct sockaddr_in)); if(ret == -1){ perror("[ERROR] Failed to bind."); exit(EXIT_FAILURE); } // 3.建立监听队列 ret = listen(sfd,BACKLOG); if(ret == -1){ perror("[ERROR] Failed to listen."); exit(EXIT_FAILURE); } // 4.建立连接,并产生新的客户端用于数据收发 cfd = accept(sfd,(struct sockaddr *)&cli_addr,&len); if(cfd == -1){ perror("[ERROR] Failed to accept."); exit(EXIT_FAILURE); } printf("ip : %s port : %d\n",inet_ntoa(cli_addr.sin_addr),ntohs(cli_addr.sin_port)); for(;;){ } close(sfd); // 关闭 文件描述符 return 0; } 【图片】

得分 100
学习任务

浪潮君 的学生作业:

#include // 提供 printf、perror 等标准输出函数 #include // 提供 malloc、free、exit 等动态内存和退出控制 #include // 提供 pthread 线程函数 #include // 提供字符串处理函数,如 strcpy // 使用匿名结构体定义类型 person typedef struct { char name[20]; // 名字字段,最多 19 个字符 + '\0' int age; // 年龄字段 } person; // 子线程函数:创建并返回一个 person 结构体指针 void *thread_func(void *) { // 动态分配内存,确保线程退出后数据依然有效 person *p = malloc(sizeof(person)); if (p == NULL) { perror("malloc failed"); // 分配失败,打印错误信息 pthread_exit(NULL); // 线程安全地退出 } // 填写结构体字段 strcpy(p->name, "Tom"); // 设置名字 p->age = 30; // 设置年龄 return (void *) p; // 返回结构体指针(会被 pthread_join 接收) } int main() { pthread_t tid; // 线程 ID person *result = NULL; // 用于接收线程返回的结构体指针 // 创建子线程,执行 thread_func 函数 if (pthread_create(&tid, NULL, thread_func, NULL) != 0) { perror("线程创建失败"); exit(EXIT_FAILURE); // 创建失败,程序退出 } // 主线程等待子线程结束,并接收其返回的结构体地址 if (pthread_join(tid, (void **) &result) != 0) { perror("线程等待失败"); exit(EXIT_FAILURE); } // 如果接收成功,打印结构体中的数据 if (result != NULL) { printf("姓名:%s\n", result->name); printf("年龄:%d\n", result->age); free(result); // 使用完后释放动态内存,防止内存泄漏 } return 0; }

得分 100
学习任务

浪潮君 的学生作业:

#include // 标准输入输出头文件(用于 printf、fgets 等) #include // 标准库头文件(用于 exit、EXIT_FAILURE 等) #include // 字符串操作函数(如 strcmp, strtok) #include // Unix 系统调用头文件(如 fork, execvp) #include // 等待子进程结束(wait 函数) #define MAX_CMD_LEN 128 // 用户输入命令最大长度 #define MAX_ARGS 10 // 命令最多支持的参数个数(包含命令本身) int main(void) { char input[MAX_CMD_LEN]; // 用于保存用户输入的命令行 // 主循环:持续运行 shell,直到用户输入 "exit" while (1) { // 打印 shell 提示符 printf("minishell> "); fflush(stdout); // 确保提示符立即显示(防止缓冲延迟) // 读取用户输入(阻塞等待,最大读取 MAX_CMD_LEN 字节) if (fgets(input, sizeof(input), stdin) == NULL) { // 若读取失败或遇到 EOF(如 Ctrl+D),退出循环 break; } // 去除结尾的换行符(fgets 会保留 \n) input[strcspn(input, "\n")] = '\0'; // 判断是否是退出命令 if (strcmp(input, "exit") == 0) { break; } // -------- 命令解析 -------- // 使用 strtok 将输入字符串按空格分割为多个参数 char *args[MAX_ARGS] = {0}; // 参数数组初始化为 NULL int arg_count = 0; // 参数计数器 // 提取第一个 token(命令本身) char *token = strtok(input, " "); while (token != NULL && arg_count < MAX_ARGS - 1) { args[arg_count++] = token; // 将参数保存到数组 token = strtok(NULL, " "); // 提取下一个参数 } args[arg_count] = NULL; // 参数列表末尾设置为 NULL,符合 execvp 要求 // -------- 创建子进程 -------- pid_t pid = fork(); // 创建子进程 if (pid < 0) { // 创建失败,打印错误信息 perror("fork failed"); continue; // 回到循环继续处理下一个输入 } if (pid == 0) { // -------- 子进程 -------- // 使用 execvp 执行命令(搜索 PATH 环境变量) execvp(args[0], args); // 若 execvp 执行失败,则继续执行下面代码 perror("exec failed"); exit(EXIT_FAILURE); // 子进程异常退出 } else { // -------- 父进程 -------- // 等待子进程结束,防止出现僵尸进程 wait(NULL); } } // Shell 主循环结束,打印退出信息 printf("退出 minishell。\n"); return 0; }

得分 100
学习任务

胡汉三66 的学生作业:

#include #include #include #include // bzore() #include // close() #include #include #include #include // TCP客户端连接 // ./a.out ip port int main(int argc, const char *argv[]) { int sfd,ret; ssize_t sbytes = 0, rbytes = 0; char buffer[1024] = {0}; struct sockaddr_in svr_addr; if(argc != 3){ fprintf(stderr,"Usage : %s < ip > < port >.\n",argv[0]); exit(EXIT_FAILURE); } // 1.创建套接字 sfd = socket(AF_INET,SOCK_STREAM,0); if(sfd == -1){ perror("[ERROR] Failed to socket."); exit(EXIT_FAILURE); } printf("sfd = %d\n",sfd); // 2.建立连接 bzero(&svr_addr,sizeof(struct sockaddr_in)); // 指针指向空间初始化(清零) svr_addr.sin_family = AF_INET; // 协议族 svr_addr.sin_port = htons(atoi(argv[2])); // 端口 svr_addr.sin_addr.s_addr = inet_addr(argv[1]); // IP ret = connect(sfd,(const struct sockaddr *)&svr_addr,sizeof(struct sockaddr_in)); // 客户端 连接 服务器 if(ret == -1){ perror("[ERROR] Failed to connect."); exit(EXIT_FAILURE); } // 3.发送数据 (客户端-->服务器) strcpy(buffer,"Hello,server"); sbytes = send(sfd,buffer,strlen(buffer) + 1,0); // "+1" ---> "\0" if(ret == -1){ perror("[ERROR] Failed to send."); exit(EXIT_FAILURE); } // 4.接收数据 (服务器--->客户端) bzero(buffer,sizeof(buffer)); // 指针指向空间初始化(清零) rbytes = recv(sfd,buffer,sizeof(buffer),0); // "+1" ---> "\0" if(ret == -1){ perror("[ERROR] Failed to recv."); exit(EXIT_FAILURE); }else if(rbytes > 0){ printf("buffer : %s\n",buffer); }else if(rbytes == 0){ printf("The server has been shut down.\n"); } close(sfd); // 关闭 文件描述符 return 0; } 【图片】

得分 100
讨论题

慕九州9493288 的学生作业:

一、代码 seqstack.h #ifndef __SEQSTACK_H__ #define __SEQSTACK_H__ #include #include #include #define MAX 12 typedef char data_t; typedef struct { data_t buf[MAX]; int top; }seqstack_t; extern seqstack_t *create_empty_seqstack(); extern data_t push_seqstack(seqstack_t *s,data_t data); extern data_t pop_seqstack(seqstack_t *s); extern int is_empty_seqstack(seqstack_t *s); extern int is_full_seqstack(seqstack_t *s); extern data_t get_top_seqstack(seqstack_t *s); #endif seqstack.c #include "seqstack.h" seqstack_t *create_empty_seqstack() { seqstack_t *s = malloc(sizeof(seqstack_t)); if(s == NULL) { printf("malloc is fail!\n"); return NULL; } memset(s,0,sizeof(seqstack_t)); s->top = -1; return s; } data_t push_seqstack(seqstack_t *s,data_t data) { return s->buf[++s->top] = data; } data_t pop_seqstack(seqstack_t *s) { return s->buf[s->top--]; } int is_empty_seqstack(seqstack_t *s) { return s->top == -1 ? 1 : 0; } int is_full_seqstack(seqstack_t *s) { return s->top == MAX - 1 ? 1 : 0; } data_t get_top_seqstack(seqstack_t *s) { return s->buf[s->top]; } main.c #include "seqstack.h" int main() { int i = 0,ret = 0; seqstack_t *s = NULL; char ch[] = {'a','n','i','h','c',' ','e','v','o','l',' ','I'}; s = create_empty_seqstack(); while(!is_full_seqstack(s)) { push_seqstack(s,ch[i++]); } // printf("top : %c\n",get_top_seqstack(s)); printf("pop : %c",pop_seqstack(s)); while(!is_empty_seqstack(s)) { ret = pop_seqstack(s); printf("%c",ret); } printf("\n"); return 0; } 二、结果 【图片】

首页上一页1234567下一页尾页
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号