![小車遠(yuǎn)程監(jiān)控系統(tǒng)-課程設(shè)計(jì)_第1頁(yè)](http://file2.renrendoc.com/fileroot_temp3/2021-11/18/c3cd2d0f-836e-4e6a-b43a-ded8798a7c47/c3cd2d0f-836e-4e6a-b43a-ded8798a7c471.gif)
![小車遠(yuǎn)程監(jiān)控系統(tǒng)-課程設(shè)計(jì)_第2頁(yè)](http://file2.renrendoc.com/fileroot_temp3/2021-11/18/c3cd2d0f-836e-4e6a-b43a-ded8798a7c47/c3cd2d0f-836e-4e6a-b43a-ded8798a7c472.gif)
![小車遠(yuǎn)程監(jiān)控系統(tǒng)-課程設(shè)計(jì)_第3頁(yè)](http://file2.renrendoc.com/fileroot_temp3/2021-11/18/c3cd2d0f-836e-4e6a-b43a-ded8798a7c47/c3cd2d0f-836e-4e6a-b43a-ded8798a7c473.gif)
![小車遠(yuǎn)程監(jiān)控系統(tǒng)-課程設(shè)計(jì)_第4頁(yè)](http://file2.renrendoc.com/fileroot_temp3/2021-11/18/c3cd2d0f-836e-4e6a-b43a-ded8798a7c47/c3cd2d0f-836e-4e6a-b43a-ded8798a7c474.gif)
![小車遠(yuǎn)程監(jiān)控系統(tǒng)-課程設(shè)計(jì)_第5頁(yè)](http://file2.renrendoc.com/fileroot_temp3/2021-11/18/c3cd2d0f-836e-4e6a-b43a-ded8798a7c47/c3cd2d0f-836e-4e6a-b43a-ded8798a7c475.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、. 課程設(shè)計(jì)報(bào)告(2016/2017學(xué)年 第一學(xué)期)題 目:小車遠(yuǎn)程監(jiān)控系統(tǒng) 專 業(yè)計(jì)算機(jī)科學(xué)與技術(shù)學(xué) 生 姓 名孫燁班 級(jí) 學(xué) 號(hào)B13040402指 導(dǎo) 教 師鄒志強(qiáng)指 導(dǎo) 單 位計(jì)算機(jī)學(xué)院、軟件學(xué)院日 期2017.01.03-01.12指導(dǎo)教師成績(jī)?cè)u(píng)定表學(xué)生姓名班級(jí)學(xué)號(hào)專業(yè)計(jì)算機(jī)科學(xué)與技術(shù)評(píng)分內(nèi)容評(píng)分標(biāo)準(zhǔn)優(yōu)秀良好中等差平時(shí)成績(jī)認(rèn)真對(duì)待課程設(shè)計(jì),遵守實(shí)驗(yàn)室規(guī)定,上機(jī)不遲到早退,不做和設(shè)計(jì)無(wú)關(guān)的事設(shè)計(jì)成果設(shè)計(jì)的科學(xué)、合理性功能豐富、符合題目要求 界面友好、外觀漂亮、大方程序功能執(zhí)行的正確性程序算法執(zhí)行的效能設(shè)計(jì)報(bào)告設(shè)計(jì)報(bào)告正確合理、反映系統(tǒng)設(shè)計(jì)流程文檔內(nèi)容詳實(shí)程度文檔格式規(guī)范、排版美觀驗(yàn)收答
2、辯簡(jiǎn)練、準(zhǔn)確闡述設(shè)計(jì)內(nèi)容,能準(zhǔn)確有條理回答各種問題,系統(tǒng)演示順利。評(píng)分等級(jí)指導(dǎo)教師簡(jiǎn)短評(píng)語(yǔ)指導(dǎo)教師簽名日期2017-01-12備注評(píng)分等級(jí)有五種:優(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ù)器多個(gè)進(jìn)程之間需要使用IPC通信(進(jìn)程間通信);客戶端: 1、在linux C下實(shí)現(xiàn)網(wǎng)絡(luò)客戶端;為了實(shí)現(xiàn)同時(shí)讀阻塞的鍵盤和阻塞的網(wǎng)絡(luò),要求使用多路IO實(shí)現(xiàn)同時(shí)阻塞的讀鍵盤和讀網(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ā)送過來(lái)的設(shè)備控制信號(hào),通過寫驅(qū)動(dòng),實(shí)現(xiàn)對(duì)底層硬件的控制,這里使用打印顯示的方式模擬。3、在進(jìn)程之間IPC通信時(shí),要求使用文件鎖或信號(hào)量實(shí)現(xiàn)資源保護(hù)??蛻舳耍?、客戶端能夠通過網(wǎng)絡(luò)通信實(shí)現(xiàn)接收服務(wù)器端傳輸過來(lái)的傳感數(shù)據(jù),并將傳感數(shù)據(jù)打印到屏幕上顯示。2、客戶端能夠從鍵盤輸入控制信號(hào),并且通信將控制信號(hào)發(fā)送給服務(wù)器。3、客戶端要求實(shí)現(xiàn)控制信號(hào)有,開燈、關(guān)燈,開空調(diào)、關(guān)空調(diào)、開啟小車、停小車等。 三、概要設(shè)計(jì)Socketsocketbindlistenconnec
4、taccpetWrite,readWrite,readbind 服務(wù)器客戶端四、詳細(xì)設(shè)計(jì) (格式:宋體,4號(hào),加粗,兩端對(duì)齊)各個(gè)算法實(shí)現(xiàn)的源程序(可以是一組源程序,每個(gè)功能模塊采用不同的函數(shù)實(shí)現(xiàn)),源程序要按照寫程序的規(guī)則來(lái)編寫。要結(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)建一個(gè)套接字文件,返回一個(gè)用于監(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);/信號(hào)處理函數(shù),按下ctrl c則退出while(1)printf("*n");printf("*n&q
10、uot;);printf("*請(qǐng)選擇序號(hào)控制智能小車*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,啟動(dòng)小車 *n");printf("* 6,停止小車 *n");printf("* 按Ctrl+C退出 *n
11、");printf("*n");printf("*n");printf("請(qǐng)輸入控制序號(hào) ->");scanf("%s",data_send);flag=atoi(data_send);if(flag>6|flag<0)/*值域判斷*/printf("輸入錯(cuò)誤,請(qǐng)重新輸入。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; /存儲(chǔ)當(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等待請(qǐng)求.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,"讀錯(cuò)誤!n");break;printf("從客戶 :%d t收到控制序號(hào) %sn",fd-3,data_recv);if(strcmp(da
15、ta_send,"quit") = 0) printf("拒絕請(qǐng)求!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, "小車已啟動(dòng)");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è)置互斥鎖,如果第二個(gè)參數(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 端口號(hào)%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)聽出錯(cuò)!n");continue; if(count_client < MAX_CONNECT)printf("現(xiàn)在已經(jīng)開始連接客戶 %d .",count_client+1);ret = pthread_create(&pthid, NUL
溫馨提示
- 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 甘肅商會(huì)墊江戰(zhàn)略合作框架協(xié)議書范本
- 中介臨街商業(yè)商鋪?zhàn)赓U合同范本
- 公有住房承租合同范本
- 滬科版八年級(jí)數(shù)學(xué)下冊(cè)聽評(píng)課記錄第20章數(shù)據(jù)的初步分析20.2數(shù)據(jù)的集中趨勢(shì)與離散程度第3課時(shí)
- 廣州民航職業(yè)技術(shù)學(xué)院《化學(xué)教學(xué)案例分析》2023-2024學(xué)年第二學(xué)期期末試卷
- 新版華東師大版八年級(jí)數(shù)學(xué)下冊(cè)《16.2.1分式的乘除》聽評(píng)課記錄5
- 隨州職業(yè)技術(shù)學(xué)院《公路客運(yùn)站建筑設(shè)計(jì)》2023-2024學(xué)年第二學(xué)期期末試卷
- 海南省2024七年級(jí)道德與法治上學(xué)期期中學(xué)情評(píng)估新人教版
- 江西工程職業(yè)學(xué)院《化學(xué)類專業(yè)寫作》2023-2024學(xué)年第二學(xué)期期末試卷
- 湘教版數(shù)學(xué)八年級(jí)下冊(cè)第三章《圖形與坐標(biāo)》聽評(píng)課記錄
- 現(xiàn)代漢語(yǔ)詞匯學(xué)精選課件
- PCB行業(yè)安全生產(chǎn)常見隱患及防范措施課件
- 上海音樂學(xué)院 樂理試題
- SAP中國(guó)客戶名單
- DB32∕T 186-2015 建筑消防設(shè)施檢測(cè)技術(shù)規(guī)程
- 2022年福建泉州中考英語(yǔ)真題【含答案】
- 汽車座椅骨架的焊接夾具畢業(yè)設(shè)計(jì)說明書(共23頁(yè))
- 露天礦山職業(yè)危害預(yù)先危險(xiǎn)分析表
- 淺談固定資產(chǎn)的審計(jì)
- WZCK-20系列微機(jī)直流監(jiān)控裝置使用說明書(v1.02)
- 模糊推理方法
評(píng)論
0/150
提交評(píng)論