




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、课程设计II报告(2016/2017学年 第一学期)题 目:小车远程监控系统专业 计算机科学与技术学生姓名孙烨班级学号B13040402指导教师邹志强指 导单位计算机学院、软件学院2017.01.03-01.12指导教师成绩评定表备注评分等级有五种:优秀、良好、中等、及格、不及格学生姓名班级学号专业计算机科学与技术评分内容评分标准优秀良好中等差平时成绩认真对待课程设计,遵守实验室规定,上机不迟 到早退,不做和设计无关的事设计成果设计的科学、合理性功能丰富、符合题目要求界面友好、外观漂亮、大方程序功能执行的正确性程序算法执行的效能设计报告设计报告正确合理、反映系统设计流程文档内容详实程度文档格式
2、规范、排版美观验收答辩简练、准确阐述设计内容,能准确有条理回答各 种问题,系统演示顺利。评分等级指导教师 简短评语指导教师签名日期2017-01-12小车远程监控系统一、课题内容和要求服务器端:1、利用 linux C 实现服务器;2、服务器端使用多进程实现多客户网络服务; 3、服务器多个进程之间需要使用 IPC 通信(进程间通信); 客户端:1 、在 linux C 下实现网络客户端; 为了实现同时读阻塞的键盘和阻塞的网络,要求使用多路 IO 实现同时阻塞的读键盘 和读网络。服务器客户端的网络通信:这里要求采用TCP协议进行通信,实现所要求的 S/C模式,并且要求实现多客户服 务。二、需求分
3、析服务器端:1、服务器端利用随机数模拟向串口读取传感数据,需要模拟的传感数据要求有:温 度、湿度、光照。2、服务器利用网络接收客户端发送过来的设备控制信号,通过写驱动,实现对底层 硬件的控制,这里使用打印显示的方式模拟。3、在进程之间 IPC 通信时,要求使用文件锁或信号量实现资源保护。客户端:1、客户端能够通过网络通信实现接收服务器端传输过来的传感数据,并将传感数据 打印到屏幕上显示。2、客户端能够从键盘输入控制信号,并且通信将控制信号发送给服务器。3、客户端要求实现控制信号有,开灯、关灯,开空调、关空调、开启小车、停小车三、概要设计服务器客户端四、详细设计(格式:宋体,4号,加粗,两端对齐
4、)各个算法实现的源程序(可以是一组源程序,每个功能模块采用不同的函数实现),源程序要按照写程序的规则来编写。要结构清晰,重点函数的重点变量,重点功能部分要加上 清晰的程序注释。头文件(cs.h)Times New Rxo man#in elude #include #i nclude #i nclude verrno .h#i nclude #i nclude #i nclude #in clude #in clude #in clude #in clude #include #define SER_PORT 5010#define SER_IP 127.0.0.1#define MAX_SI
5、ZE 2048#define MAX_CONNECT 20 /最大可连接的客户端数量#define CHPTH_COUNT 3#define PTH_EIXT 1int skfd = 0;int cfd = 0;int ret = 0;void err_fun(const char *const file_name, int line, const char *const fun_name, int err_no) fprintf(stderr, %s %d %s: %sn, file_name, line, fun_name, strerror(err_no); exit(-1);void
6、signal_fun(int a)int ret = shutdown(skfd, SHUT_WR);if(ret 0) err_fun(_FILE_, _LINE_, shutdown, errno);printf(nShuts Down!n);exit(0);struct global_vachar pth_exit_flag;pthread_mutex_t mutex;glb_va = 0, PTHREAD_MUTEX_INITIALIZER;struct pthread_argint fd;pthread_t pthid;int pthnum;客户端代码:#include cs.hin
7、t main(void)char data_sendMAX_SIZE=0;char data_recvMAX_SIZE=0;struct sockaddr_in s_addr = 0;int flag=0;skfd = socket(PF_INET, SOCK_STREAM, 0);/* 创建一个套接字文件,返回一个用于监听用客户上线用的文件描述符 * 参数 1:域(协议族) */if(skfd 0) err_fun(_FILE_, _LINE_, socket, errno); s_addr.sin_family = AF_INET;s_addr.sin_port = htons(SER_P
8、ORT); s_addr.sin_addr.s_addr = inet_addr(SER_IP);ret = connect(skfd, (struct sockaddr *)&s_addr, sizeof(s_addr);if(ret );scanf(%s,data_send);flag=atoi(data_send);n);if(flag6|flag0) /* 值域判断 */printf( 输入错误,请重新输入。 else ret = write(skfd, data_send, MAX_SIZE);if(ret 0) err_fun(_FILE_, _LINE_, write error
9、, errno); ret = read(skfd,data_recv,MAX_SIZE);if(ret %sn, data_recv); memset(data_send, 0, MAX_SIZE);memset(data_recv, 0, MAX_SIZE);sleep(1.5);return 0;服务器端:#include cs.hint count_client= 0; /存储当前的客户端数量static void pthread_fun(void * cfd)count_client+;int tempfd= 0;int i_recvBytes;char data_recvMAX_S
10、IZE=0;char data_send MAX_SIZE=0;strcpy(data_send, 已执行操作 );struct pthread_arg *p = (struct pthread_arg *)cfd;int fd = p-fd;while(1)printf(n 等待请求 .n);if(glb_va.pth_exit_flag = PTH_EIXT) pthread_mutex_unlock(&glb_va.mutex); break;i_recvBytes = read(fd,data_recv,MAX_SIZE);if(i_recvBytes = 0) printf( 客户
11、%d 下线 n,fd-3);break;if(i_recvBytes = -1)fprintf(stderr,读错误!n);break;printf( 从客户 :%d t 收到控制序号 %sn,fd-3,data_recv); if(strcmp(data_send,quit) = 0) printf( 拒绝请求 !n);break;pthread_mutex_lock(&glb_va.mutex);/ 增加互斥锁sleep(3);time_t tim;float illumi natio n=O,humid=O,temperature=O; 定义湿度,光照,温度 char t16;if(at
12、oi(data_recv)=O&atoi(data_recv)7) switch(atoi(data_recv)case O:tim=time(NULL);srand(tim);illumination=(float)(rand()%1OO);/ 随机生成 humid=(float)(rand()%1OO);temperature=(float)(rand()%4O);strcpy(data_send, 车内环境信息:光照 ); sprintf(t,%0.1f,illumination);/ 将光照值加入到 t 字符串中 strcat(data_send,t);strcat(data_send
13、, 湿度 );sprintf(t,%0.1f,humid);/ 将湿度值加入到 t 字符串中 strcat(data_send,t);strcat(data_send, 温度 );sprintf(t,%0.1f,temperature);将温度值加入到t字符串中 strcat(data_send,t);tempfd=write(fd,data_send,strlen(data_send);break;case1:strcpy(data_send调已关闭 ”);tempfd=write(fd,data_send,strlen(data_send);break; case2:strcpy(data
14、_send,空调已开启);tempfd=write(fd,data_send,strlen(data_send);break; case3:strcpy(data_send,灯已关闭);tempfd=write(fd,data_send,strlen(data_send);break; case4:strcpy(data_send,灯已打开);tempfd=write(fd,data_send,strlen(data_send);break;case5:strcpy(data_send,小车已启动);tempfd=write(fd,data_send,strlen(data_send);bre
15、ak; case6:strcpy(data_send,小车已停止);tempfd=write(fd,data_send,strlen(data_send);break;pthread_mutex_unlock(&glb_va.mutex);if(tempfd = -1)break;printf( 停止当前连接 nn);close(fd);count_client-;/pthread_exit(NULL);int main(void)pthread_t pthid = 0;struct sockaddr_in s_addr = 0;struct pthread_arg pthargCHPTH_C
16、OUNT = 0;/* 设置互斥锁,如果第二个参数如果是 NULL ,表示使用默认设置 */ret = pthread_mutex_init(&glb_va.mutex, NULL);if(skfd 0) err_fun(_FILE_, _LINE_, pthread_mutex_init, ret);skfd = socket(PF_INET, SOCK_STREAM, 0);if(skfd 0) err_fun(_FILE_, _LINE_, socket, errno); s_addr.sin_family = AF_INET;s_addr.sin_port = htons(SER_PO
17、RT); s_addr.sin_addr.s_addr = inet_addr(SER_IP);ret = bind(skfd, (struct sockaddr *)&s_addr, sizeof(s_addr);if(ret 0) err_fun(_FILE_, _LINE_, bind, ret);ret = listen(skfd, MAX_CONNECT);if(ret 0) err_fun(_FILE_, _LINE_, listen, errno);printf( 监听客户地址 %s 端口号 %d.n,SER_IP,SER_PORT); signal(SIGINT, signal
18、_fun);while(1)printf(n 等待新的连接 .n);cfd = accept(skfd,NULL,NULL);if(cfd = -1)fprintf(stderr, 监听出错 !n);continue;if(count_client 1按下0时服务器收到消息:收到控制序号0等待请求.按下o时服务器显示车内环境信息:请输入控制序号 6服务器消息 车内环境信息:光照44用湿度45 內温度服务器收到控制序号1:客户端输入1,并收到服务器信息:空调已 经关闭:粘来*鼎帛拿眾定鼎丰字*寓宰*溶鼎常當*嘉审常:来矗鼎丰塞:宰床幕幸羸溶鼎常當*鼎肃拿来.等待请求.从客户:1收到控制序号1请输
19、入控制序号 1 腑务器消息亠空调已关闭服务器收到序号5:等待请求.从客户:1收到控制序号5等待请求.客户端显示小车已启动请输入控制序号 5 服隽器消息 -a小车已启动*常常峯常卡*塞秦常黑*卡*建建*幸幸宰*#*#*#*#*请选择序号控制音能小车5车内环境信息1关闭小车空调 2打幵小车空调 入关闭小车灯4,打开小车灯5 启动小车6,停止小车服务器连接第二个客户端时:等待请求*现在已经开始连接客户2 .等待新的连接第二个客户端下线时,服务器显示:该客户端退出:等待请求.客户2下线停止当前连接丰丰*丰車*丰*車*韋韋車*韋韋*韋寧*拿*拿*拿拿哉*请输入控制序号-ACShuts Down!luoy
20、angL-y:/Desktop/car_final$当两个客户端同时向服务器发送消息时,开启的互斥锁使得当前面的信息处理完毕时再处 理第二个客户端。lucif jfc当旬if序hrAllu呼/D皿怕吟1_伽1帥收到惶制序写6專秸iff班.3 hiigypings-fl jrw(F)1*:即升jiaui MfiniH;等猜睛求 从售户:1季術睛察 从BF户:1 从喜 :3坨剤控制斥号5 收到控制序号乐收掠制即号2匕Sftfirt1. lufefE 叵11E1 hxiydh. EJg梢苗求收判腔制序号5 吹到15制序曾6呼持II事, 从喜户:1 从審户泊理在已径弭跆连持客户2 專柑新的選窿首Mt人
21、揑制序V piCar_-lirul立藩OF I M4I EI aM UtMTl辱即個用b即止小车 irxs 六、调试过程中的问题1、当两个客户端同时向服务器发送消息时,会同时向服务器端写入,弓I起混乱。解 决的办法是加入了互斥锁。开启的互斥锁使得当前面的信息处理完毕时再处理第二个客户 端。2、 碰到了一些基本语法错误,比如字符串之间的比较,复制,以及spri ntf 函数的 学习使用将多个数据拼接传输到客户端,通过查阅网络信息得以解决错误。3、初步传感器的车内环境信息:温度、光照、湿度是客户端自己生成并显示的,经 过改进,将生成的数据置于服务器并发送至客户端,实现真正的模拟传感器收发。七、参考
22、文献和查阅的资料上课所用实例代码八、程序设计总结这次程序设计,我实现了在linux操作环境下进行一个服务器和多个客户端之间的通信,利用传感器传输小车内的环境信息,利用线程服务多个客户端,用read和write函数实现数据传输。和同伴的互助之下,完成了这个小程序,并且我深刻感悟,重要的不是编 码能力,而是团队协作能力,并且在想法的交流中摩擦出了智慧的火花。塞制系统的设计与研究EEPROM的工艺和制程方法及对良率的影响研究67891 22 2 33 455 5 666 778 899.012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789 000-4 mo三二一三三三于种一三三三于一三理三-三压一三于于三三一三于o三一三
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 工厂新员工转正工作总结
- 企业节能验收报告填写范本
- 做高校食堂策划方案模板
- 中国纸杯和容器行业市场占有率及投资前景预测分析报告
- 中国液位计行业市场发展监测及投资潜力预测报告
- 2025年中国玻纤吸声板行业发展监测及投资战略研究报告
- 【课件】+第一课时+有理数的概念+课件-2025-2026学年人教版数学七年级上册
- 儿童素描创意画课件图片
- 2023-2029年中国石膏板行业市场深度评估及投资战略规划报告
- 三月晚会活动策划方案
- 2025年-浙江省安全员《B证》考试题库及答案
- 第五课+弘扬劳动精神、劳模精神、工匠精神【中职专用】中职思想政治《职业道德与法治》高效课堂(高教版2023·基础模块)
- 2025新人教版英语七年级下单词默写单
- 广东省深圳市南山区2024-2025学年七年级上学期期中考试数学试卷(无答案)
- 合作双方战略合作谅解备忘录
- 国土空间基础信息平台数据建库规范DB41-T 2330-2022
- 七年级上册口算题300道
- 《2024运动鞋市场与消费趋势洞察》
- 山东省机场管理集团济南国际机场股份有限公司招聘笔试题库2024
- 《计算工具的认识 》(教学设计)-2023-2024学年四年级上册数学人教版
- FZ∕T 54007-2019 锦纶6弹力丝行业标准
评论
0/150
提交评论