1、本课程设计实验主要围绕Linux平台上主流的基础技术展开,这些技术包括:Linux的进程、线程通信和同步技术; socket网络通信技术等,这些技术可以集中体现并应用在并发程序设计中。通过并发程序的设计与开发,培养学生底层软件开发的能力,并为将来从事UNIX/Linux平台开发、嵌入式开发等相对高端的软件开发工作打下基础。2、实验项目的功能及模块划分本实验是一个Linux下的并发程序。基本功能有通过Socket,一个进程接收并传送用户操作命令以及相关操作数据等;另一进程收到该命令后,先分析该命令,然后真真完成该命令的具体操作。在此基础上,还具有接收用户输入方式为图形化界面;容许一次传送多个命令
2、(主要是传送的数据格式支持多个命令)等功能。3、设计与实现31 系统结构 311 系统结构图32 发送进程321 基本功能主菜单、通过socket传送命令和操作数据给另一个进程,命令包括:添加学生信息、删除学生信息、修改学生信息、显示学生信息。一次允许传送多个命令。33接收进程的实现 331基本功能 进程收到该命令后,先分析该命令,然后完成该命令的具体操作。4数据库访问或文件操作 41文件操作学生基本信息存储在文件stu.info中,该文件相关的结构可以按照以下方式定义:struct stu_infochar stu_num12;char name10;char zhuanye10;short
3、 int sex;char mobile_phone12;对文件的操作主要是通过系统调用来实现的,其中包括打开和创建文件(open、creat)、读写文件(write、read)和文件定位(lseek)。对文件的删除使用的系统调用system调用/bin/sh 执行rm命令实现,即system(“rm -f stu.info”);5 通信模块的实现 51 通信方式的选择 进程通信方式选择的socket,因为进行通信的进程不可能局限于单机,更多的时候是网络中不同主机进程间的通信,通信的数据结构也可以根据需要自行进行定义。进程通信多数情况下是多进程,在服务器通过实现并发服务器能够很好的让服务器和多
4、个客户端进程间进行通信。6、测试与调试(1)客户端与服务器建立连接客户端的主菜单:服务器(打印连接信息)(2)添加学生信息客户端:服务器:(3)修改学生信息(4)删除学生信息(5)显示学生信息(6)并发处理多客户一个添加信息,一个查看信息7、总结附录:程序代码源代码由三个文件组成:net.h、server.c和client.c/net.h#include string.hstdlib.hsys/socket.harpa/inet.hnetinet/in.herrno.hunistd.hfcntl.h#define PORT 3000 char stu_num12; char name10; c
5、har zhuanye10; short int sex; char mobile_phone12;struct msg_buffer char cmd; char cmd_param12; struct stu_info stu;/*/client.c#include net.hstruct msg_buffer msg20;static int msg_count = 0;char menu() system(clear); printf(-n* (a)Add Student Informationn*n* (m)Modify Student Informationn*n* (d)Dele
6、te Student Informationn*n* (s)Show Student Informationn*n* (e)The End Of Command Inputn*nInput /a /m /d /s /e : scanf(%c, &msgmsg_count.cmd); return msgmsg_count.cmd;void addStuInfo()nnInput the information you want to addnNum:%s, msgmsg_count.stu.stu_num);Name:, msgmsg_count.stu.name);Sex(1/0):%dms
7、gmsg_count.stu.sex);zhuanye:, msgmsg_count.stu.zhuanye);Mobile Phone:, msgmsg_count.stu.mobile_phone);void modifyStuInfo()nnInput the student num of modifyn, msgmsg_count.cmd_param);Input the information you want to modifynvoid deleteStuInfo()nnInput the student num of deletenvoid showStuInfo()nnSho
8、w Command is input, press Enter.n getchar();int endOfInput()nCommand Input is finish.Press Entern return 1;int main(int argc, char *argv) int flag, sockfd; struct sockaddr_in client_addr; sockfd = socket(AF_INET, SOCK_STREAM, 0); bzero(&client_addr, sizeof(client_addr); client_addr.sin_family = AF_I
9、NET; client_addr.sin_port = htons(PORT); inet_aton(argv1, &client_addr.sin_addr); bind(sockfd, (struct sockaddr *)& if(connect(sockfd, (struct sockaddr *)&client_addr, sizeof(struct sockaddr) = -1) fprintf(stderr, connect error %sn, strerror(errno); exit(0); while(1) switch(menu() case a: addStuInfo();break;m modifyStuInfo();d deleteStuInfo();s showStuInfo();e flag=endOfInput(); default:Input the choicen msg_count+; if(flag = 1) if(write(sockfd, &msg_count, sizeof(int) = -1)write error %sn if(write(sockfd, msg, sizeof(struct msg_buffer)*msg_count) = -1), strerro
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1