版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、. 課程設(shè)計(jì)報告(2016/2017學(xué)年 第一學(xué)期)題 目:小車遠(yuǎn)程監(jiān)控系統(tǒng) 專 業(yè)計(jì)算機(jī)科學(xué)與技術(shù)學(xué) 生 姓 名孫燁班 級 學(xué) 號B13040402指 導(dǎo) 教 師鄒志強(qiáng)指 導(dǎo) 單 位計(jì)算機(jī)學(xué)院、軟件學(xué)院日 期2017.01.03-01.12指導(dǎo)教師成績評定表學(xué)生姓名班級學(xué)號專業(yè)計(jì)算機(jī)科學(xué)與技術(shù)評分內(nèi)容評分標(biāo)準(zhǔn)優(yōu)秀良好中等差平時成績認(rèn)真對待課程設(shè)計(jì),遵守實(shí)驗(yàn)室規(guī)定,上機(jī)不遲到早退,不做和設(shè)計(jì)無關(guān)的事設(shè)計(jì)成果設(shè)計(jì)的科學(xué)、合理性功能豐富、符合題目要求 界面友好、外觀漂亮、大方程序功能執(zhí)行的正確性程序算法執(zhí)行的效能設(shè)計(jì)報告設(shè)計(jì)報告正確合理、反映系統(tǒng)設(shè)計(jì)流程文檔內(nèi)容詳實(shí)程度文檔格式規(guī)范、排版美觀驗(yàn)收答
2、辯簡練、準(zhǔn)確闡述設(shè)計(jì)內(nèi)容,能準(zhǔn)確有條理回答各種問題,系統(tǒng)演示順利。評分等級指導(dǎo)教師簡短評語指導(dǎo)教師簽名日期2017-01-12備注評分等級有五種:優(yōu)秀、良好、中等、及格、不及格小車遠(yuǎn)程監(jiān)控系統(tǒng)一、 課題內(nèi)容和要求服務(wù)器端: 1、利用linux C實(shí)現(xiàn)服務(wù)器; 2、服務(wù)器端使用多進(jìn)程實(shí)現(xiàn)多客戶網(wǎng)絡(luò)服務(wù); 3、服務(wù)器多個進(jìn)程之間需要使用IPC通信(進(jìn)程間通信);客戶端: 1、在linux C下實(shí)現(xiàn)網(wǎng)絡(luò)客戶端;為了實(shí)現(xiàn)同時讀阻塞的鍵盤和阻塞的網(wǎng)絡(luò),要求使用多路IO實(shí)現(xiàn)同時阻塞的讀鍵盤和讀網(wǎng)絡(luò)。服務(wù)器客戶端的網(wǎng)絡(luò)通信:這里要求采用TCP協(xié)議進(jìn)行通信,實(shí)現(xiàn)所要求的S/C模式,并且要求實(shí)現(xiàn)多客戶服務(wù)。二、
3、需求分析服務(wù)器端:1、服務(wù)器端利用隨機(jī)數(shù)模擬向串口讀取傳感數(shù)據(jù),需要模擬的傳感數(shù)據(jù)要求有:溫度、濕度、光照。2、服務(wù)器利用網(wǎng)絡(luò)接收客戶端發(fā)送過來的設(shè)備控制信號,通過寫驅(qū)動,實(shí)現(xiàn)對底層硬件的控制,這里使用打印顯示的方式模擬。3、在進(jìn)程之間IPC通信時,要求使用文件鎖或信號量實(shí)現(xiàn)資源保護(hù)??蛻舳耍?、客戶端能夠通過網(wǎng)絡(luò)通信實(shí)現(xiàn)接收服務(wù)器端傳輸過來的傳感數(shù)據(jù),并將傳感數(shù)據(jù)打印到屏幕上顯示。2、客戶端能夠從鍵盤輸入控制信號,并且通信將控制信號發(fā)送給服務(wù)器。3、客戶端要求實(shí)現(xiàn)控制信號有,開燈、關(guān)燈,開空調(diào)、關(guān)空調(diào)、開啟小車、停小車等。 三、概要設(shè)計(jì)Socketsocketbindlistenconnec
4、taccpetWrite,readWrite,readbind 服務(wù)器客戶端四、詳細(xì)設(shè)計(jì) (格式:宋體,4號,加粗,兩端對齊)各個算法實(shí)現(xiàn)的源程序(可以是一組源程序,每個功能模塊采用不同的函數(shù)實(shí)現(xiàn)),源程序要按照寫程序的規(guī)則來編寫。要結(jié)構(gòu)清晰,重點(diǎn)函數(shù)的重點(diǎn)變量,重點(diǎn)功能部分要加上清晰的程序注釋。頭文件(cs.h)Times New Rxoman#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <errno.h>#include <string.h>#in
5、clude <strings.h>#include <sys/types.h> #include <sys/socket.h>#include <arpa/inet.h>#include <assert.h>#include <signal.h>#include <pthread.h>#define SER_PORT 5010#define SER_IP "127.0.0.1"#define MAX_SIZE 2048#define MAX_CONNECT 20 /最大可連接的客戶端數(shù)量#d
6、efine 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 signal_fun(int a)int ret = shutd
7、own(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.
8、h"int 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);/* 創(chuàng)建一個套接字文件,返回一個用于監(jiān)聽用客戶上線用的文件描述符 * 參數(shù)1:域(協(xié)議族) */if(skfd < 0) err_fun(_FILE_, _LINE_, "socket", errno); s_addr.sin_family = AF_INET;s_ad
9、dr.sin_port = htons(SER_PORT);s_addr.sin_addr.s_addr = inet_addr(SER_IP);ret = connect(skfd, (struct sockaddr *)&s_addr, sizeof(s_addr);if(ret < 0) err_fun(_FILE_, _LINE_, "accept", errno);signal(SIGINT, signal_fun);/信號處理函數(shù),按下ctrl c則退出while(1)printf("*n");printf("*n&q
10、uot;);printf("*請選擇序號控制智能小車*n");printf("* 0,車內(nèi)環(huán)境信息 *n");printf("* 1,關(guān)閉小車空調(diào) *n");printf("* 2,打開小車空調(diào) *n");printf("* 3,關(guān)閉小車燈 *n");printf("* 4,打開小車燈 *n");printf("* 5,啟動小車 *n");printf("* 6,停止小車 *n");printf("* 按Ctrl+C退出 *n
11、");printf("*n");printf("*n");printf("請輸入控制序號 ->");scanf("%s",data_send);flag=atoi(data_send);if(flag>6|flag<0)/*值域判斷*/printf("輸入錯誤,請重新輸入。n");else ret = write(skfd, data_send, MAX_SIZE);if(ret < 0) err_fun(_FILE_, _LINE_, "write
12、error", errno);ret = read(skfd,data_recv,MAX_SIZE);if(ret < 0) err_fun(_FILE_, _LINE_, "read error", errno);printf("服務(wù)器消息 ->%sn", data_recv);memset(data_send, 0, MAX_SIZE);memset(data_recv, 0, MAX_SIZE);sleep(1.5);return 0;服務(wù)器端:#include "cs.h"int count_client
13、= 0; /存儲當(dāng)前的客戶端數(shù)量static void pthread_fun(void * cfd)count_client+;int tempfd= 0;int i_recvBytes;char data_recvMAX_SIZE=0;char data_send MAX_SIZE=0;strcpy(data_send, "已執(zhí)行操作");struct pthread_arg *p = (struct pthread_arg *)cfd;int fd = p->fd;while(1)printf("n等待請求.n");if(glb_va.pth
14、_exit_flag = PTH_EIXT) pthread_mutex_unlock(&glb_va.mutex);break;i_recvBytes = read(fd,data_recv,MAX_SIZE);if(i_recvBytes = 0) printf(" 客戶 %d 下線n",fd-3);break;if(i_recvBytes = -1)fprintf(stderr,"讀錯誤!n");break;printf("從客戶 :%d t收到控制序號 %sn",fd-3,data_recv);if(strcmp(da
15、ta_send,"quit") = 0) printf("拒絕請求!n");break;pthread_mutex_lock(&glb_va.mutex);/增加互斥鎖sleep(3);time_t tim;float illumination=0,humid=0,temperature=0;/定義濕度,光照,溫度char t16;if(atoi(data_recv)>=0&&atoi(data_recv)<7)switch(atoi(data_recv)case 0:tim=time(NULL);srand(tim)
16、;illumination=(float)(rand()%100);/隨機(jī)生成humid=(float)(rand()%100);temperature=(float)(rand()%40);strcpy(data_send, "車內(nèi)環(huán)境信息:光照 ");sprintf(t,"%0.1f",illumination);/將光照值加入到t字符串中strcat(data_send,t);strcat(data_send," 濕度 ");sprintf(t,"%0.1f",humid);/將濕度值加入到t字符串中strc
17、at(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, 調(diào)已關(guān)閉");tempfd=write(fd,data_send,strlen(data_send);break;case2:strcpy(data_send, "空調(diào)已開啟&quo
18、t;);tempfd=write(fd,data_send,strlen(data_send);break;case3:strcpy(data_send, "燈已關(guān)閉");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,dat
19、a_send,strlen(data_send);break;case6:strcpy(data_send, "小車已停止");tempfd=write(fd,data_send,strlen(data_send);break;pthread_mutex_unlock(&glb_va.mutex);if(tempfd = -1)break;printf("停止當(dāng)前連接.nn");close(fd);count_client-;/pthread_exit(NULL);int main(void)pthread_t pthid = 0;struct
20、sockaddr_in s_addr = 0;struct pthread_arg pthargCHPTH_COUNT = 0;/* 設(shè)置互斥鎖,如果第二個參數(shù)如果是NULL,表示使用默認(rèn)設(shè)置 */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_, _L
21、INE_, "socket", errno); s_addr.sin_family = AF_INET;s_addr.sin_port = htons(SER_PORT);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(
22、ret < 0) err_fun(_FILE_, _LINE_, "listen", errno);printf("監(jiān)聽客戶地址%s 端口號%d.n",SER_IP,SER_PORT);signal(SIGINT, signal_fun);while(1)printf("n等待新的連接.n");cfd = accept(skfd,NULL,NULL); if(cfd = -1)fprintf(stderr,"監(jiān)聽出錯!n");continue; if(count_client < MAX_CONNECT)printf("現(xiàn)在已經(jīng)開始連接客戶 %d .",count_client+1);ret = pthread_create(&pthid, NUL
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度養(yǎng)老服務(wù)業(yè)招標(biāo)文件編制與養(yǎng)老服務(wù)標(biāo)準(zhǔn)合同3篇
- 二零二五版E管材國際環(huán)境友好采購合同3篇
- 2025年度環(huán)保型包裝材料研發(fā)與市場銷售合同3篇
- 2025年度綠色有機(jī)大米直供采購合同3篇
- 2025年無證房買賣合同范本解讀與實(shí)施手冊6篇
- 二零二五年度裝配式建筑構(gòu)件安裝質(zhì)量保修合同3篇
- 現(xiàn)代文學(xué)史自考知識點(diǎn):郭沫若的作品
- 二零二四年體育場館高空作業(yè)腳手架勞務(wù)分包合同2篇
- 2024版煙酒零售購銷協(xié)議樣本一
- 2025年度新型環(huán)保儲藏室設(shè)施買賣合同協(xié)議書3篇
- GB/T 12914-2008紙和紙板抗張強(qiáng)度的測定
- GB/T 1185-2006光學(xué)零件表面疵病
- ps6000自動化系統(tǒng)用戶操作及問題處理培訓(xùn)
- 家庭教養(yǎng)方式問卷(含評分標(biāo)準(zhǔn))
- 城市軌道交通安全管理課件(完整版)
- 線纜包覆擠塑模設(shè)計(jì)和原理
- TSG ZF001-2006 安全閥安全技術(shù)監(jiān)察規(guī)程
- 部編版二年級語文下冊《蜘蛛開店》
- 鍋爐升降平臺管理
- 200m3╱h凈化水處理站設(shè)計(jì)方案
- 個體化健康教育記錄表格模板1
評論
0/150
提交評論