freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于bs的遠(yuǎn)程查詢系統(tǒng)的設(shè)計(jì)_畢業(yè)設(shè)計(jì)-資料下載頁(yè)

2025-07-02 08:43本頁(yè)面

【導(dǎo)讀】1.嵌入式的定義與特點(diǎn)。3.本設(shè)計(jì)所采用的處理器及實(shí)驗(yàn)板介紹。1.嵌入式操作系統(tǒng)的分類和發(fā)展。2.uClinux的發(fā)展過(guò)程。3.并發(fā)服務(wù)器基礎(chǔ)。1.Socket程序要實(shí)現(xiàn)的功能和總體設(shè)計(jì)。3.接受的數(shù)據(jù)報(bào)格式。3.C#中Socket編程的注意事項(xiàng)。1.連接數(shù)據(jù)庫(kù)及數(shù)據(jù)庫(kù)操作。

  

【正文】 較多,實(shí)時(shí)性要求也較高,因此采用多線程并發(fā)服務(wù)器,它對(duì)于需處理大量客戶的服務(wù)器而言具有更大的優(yōu)勢(shì)。由于工業(yè)系統(tǒng)要求較高的可 靠性,為了避免數(shù)據(jù)丟失,應(yīng)采用面向連接的服務(wù)器。 I/O 多路復(fù)用實(shí)現(xiàn)起來(lái)比較復(fù)雜,并且由于服務(wù)器端采用的開發(fā)工具是 C,并不能調(diào)用在 Unix 下的一些系統(tǒng)函數(shù),為其實(shí)現(xiàn)增加了困難??紤]到此因素,最終采用的是多線程面向連接的服務(wù)器。 (二)、嵌入式中 Unix 下的 Socket 程序設(shè)計(jì) 1. Socket 程序要實(shí)現(xiàn)的功能和總體設(shè)計(jì)。 在嵌入式設(shè)備中的 socket 程序要實(shí)現(xiàn)的主要功能是,向 pc 上位機(jī)發(fā)送數(shù)據(jù),同時(shí)接收 pc 上位機(jī)向嵌入式發(fā)送的參數(shù)配置及 ip 地址。具體程序如下: int munacate(char value[MAXDATASIZE]) { int fd,numbytes,num,fd1,fd2。 struct hostent *he。 struct sockaddr_in server。 char recvbuf[MAXDATASIZE]。 if((he=gethostbyname(ipbuffer))==NULL) { 監(jiān)聽 將監(jiān)聽套接字加入 I/O 列表 調(diào)用 select()函數(shù)等待被激活的 I/O 接收客戶連接,并將新的連接套接字加入 I/O 列表 用 recv()函數(shù)接到用戶請(qǐng)求用 send()函數(shù)相應(yīng)用戶 關(guān)閉連接套接字 是監(jiān)聽套接字被激活嗎? 關(guān)閉連接? printf(gethostbyname() error\n)。 return(1)。 } if((fd=socket(AF_INET,SOCK_STREAM,0))==1) { printf(socket() error\n)。 return(1)。 } bzero(amp。server,sizeof(server))。 =AF_INET。 =htons(PORT)。 if(i_pton(AF_INET,ipbuffer,amp。)=0) { printf(Wrong IP address!\n)。 return(1)。 } if(connect(fd,(struct sockaddr *)amp。server,sizeof(struct sockaddr))==1) { printf(connect() error\n)。 return(1)。 } if((numbytes=send(fd,value,MAXDATASIZE,0))==1) { printf(send() error\n)。 return(1)。 }//發(fā)送消息的部分 if((num=recv(fd,recvbuf,MAXDATASIZE,0))!=0) { //具體操作 }//接收消息的部分 close(fd)。 printf(leave conmmunacate\n)。 } 2.發(fā)送數(shù)據(jù)報(bào)格式。 警報(bào)的數(shù)據(jù)格式是以 warn 開頭,后跟警報(bào)內(nèi)容。數(shù)據(jù)的數(shù)據(jù)格式是以 data開頭,后跟數(shù)據(jù)。請(qǐng)求配置參數(shù)的數(shù)據(jù)格式是以 ipad 開頭,后面沒(méi)有消息。 3.接受的數(shù)據(jù)報(bào)格式。 上位機(jī)發(fā)來(lái)的配置信息,以 c 字符開頭,后跟內(nèi)容, 嵌入式 設(shè)備 接收到此類數(shù)據(jù)包即將接收到的內(nèi)容寫入 config 文件,供數(shù)據(jù)控制模塊讀取。 上位 機(jī)發(fā)來(lái)的關(guān)于更改主機(jī) ip 的消息,以 i字符開頭,后跟內(nèi)容, 嵌入式 設(shè)備 接收到此類數(shù)據(jù)包即將接收到的內(nèi)容寫入 ip 文件,供數(shù)據(jù)通訊模塊讀取。 4.參數(shù)控制。 本模塊主要實(shí)現(xiàn)嵌入式與 pc 上位機(jī)的通訊,上位機(jī)作為服務(wù)器端,嵌入式 作 為 客 戶 端 , 這 時(shí) 就 要 求 嵌 入 式 設(shè) 備 要 知 道 上位 機(jī)的 ip 地址。read(fd,ipbuffer,15)。這就將 ip文件中的服務(wù)器 ip地址讀入 ipbuffer字符串中,然后再用 gethostbyname(ipbuffer)獲取網(wǎng)絡(luò)可以識(shí)別的服務(wù)器 ip 地址。 (三)、上位機(jī)中 WinSock 程序設(shè)計(jì) 1. Windows 下 Socket 編程的簡(jiǎn)介。 WinSock 是 Windows Socket 規(guī)范的簡(jiǎn)稱 ,為應(yīng)用程序開發(fā)商提供了一套簡(jiǎn)單的 API,是開放的、支持多種協(xié)議的 Windows 下的網(wǎng)絡(luò)編程接口。從 版到 版 ,經(jīng)過(guò)不斷完善 ,事實(shí)上已經(jīng)成了 Windows 網(wǎng)絡(luò)編程標(biāo)準(zhǔn)。在此基礎(chǔ)上 ,為簡(jiǎn)化網(wǎng)絡(luò)編程, Microsoft 公司的基本類庫(kù)提供了兩個(gè)用于 WinSock 編程的類 ,即 :CAsyncSocket 和 CSocket。 CSocket 是從 CAsyncSocket 繼承而來(lái) 。 2.并發(fā)服務(wù)器采用的算法。 本 課題采用的是面向連接的多線程并發(fā)服務(wù)器。主線程打開套接口后,接受嵌入式設(shè)備發(fā)來(lái)的連接請(qǐng)求,同時(shí)開辟另一個(gè)線程處理此次請(qǐng)求,而主進(jìn)程可以繼續(xù)接受別的請(qǐng)求。主線程主要進(jìn)行監(jiān)聽操作,其程序如下: public static void StartListening() { // Data buffer for ining data. byte[] bytes = new Byte[1024]。 // Establish the local endpoint for the socket. // The DNS name of the puter // running the listener is . IPHostEntry ipHostInfo = (())。 IPAddress ipAddress = [0]。 IPEndPoint localEndPoint = new IPEndPoint(ipAddress,1234)。 // Create a TCP/IP socket. Socket listener = new Socket(, , )。 // Bind the socket to the local endpoint and listen for ining connections. try { (localEndPoint)。 (100)。 while (true) { // Set the event to nonsignaled state. ()。 // Start an asynchronous socket to listen for connections. ( new AsyncCallback(AcceptCallback), listener )。 // Wait until a connection is made before continuing. ()。 } } } 3. C中 Socket 編程的注意事項(xiàng)。 C中的 Socket 類為網(wǎng)絡(luò)通信提供了一套豐富的方法和屬性。 Socket 類允許您使用 ProtocolType 枚舉中所列出的任何一種協(xié)議執(zhí)行異步和同步數(shù)據(jù)傳輸。 如果當(dāng)前使用的是面向連接的協(xié)議(如 TCP),則可使用 Socket、 BeginConnect 和 EndConnect 方法來(lái)連接偵聽主機(jī)。通過(guò)使用 BeginSend 和 EndSend 方法,或者使用 BeginReceive 和 EndReceive 方法,可以進(jìn)行異步數(shù)據(jù)通信??梢允褂? BeginAccept 和 EndAccept 處理傳入的連接請(qǐng)求。 但是 BeginAccept, BeginReceive, BeginSend 等函數(shù)都是回調(diào)函數(shù), 必須創(chuàng)建實(shí)現(xiàn)委托的回調(diào)方法 。如上例中的 BeginAccept 中要實(shí)現(xiàn) AcceptCallback 代碼如下: public static void AcceptCallback(IAsyncResult ar) { // Signal the main thread to continue. ()。 // Get the socket that handles the client request. Socket listener = (Socket) 。 Socket handler = (ar)。 // Create the state object. StateObject state = new StateObject()。 = handler。 ( , 0, , 0, new AsyncCallback(ReadCallback), state)。 } 這其中又出現(xiàn)了要實(shí)現(xiàn)的 ReadCallback,它的代碼如下: public static void ReadCallback(IAsyncResult ar) { String content = 。 // Retrieve the state object and the handler socket // from the asynchronous state object. StateObject state = (StateObject) 。 Socket handler = 。 string ipstring=((IPEndPoint)).()。 // Read data from the client socket. int bytesRead = (ar)。 if (bytesRead 0) { // There might be more data, so store the data received so far. (( ,0,bytesRead))。 // Check for endoffile tag. If it is not there, read // more data. content = ()。 //連接數(shù)據(jù)庫(kù),根據(jù)內(nèi)容采用不同的數(shù)據(jù)庫(kù)操作 } } C中的異步 Socket 實(shí)現(xiàn)時(shí)并不像在 linux 中那么簡(jiǎn)單,她要考慮到采用何種算法,比如說(shuō)在這里就不能使用多進(jìn)程的算法, I/O 多路復(fù)用的實(shí)現(xiàn)也有難度,而多線程的算法因?yàn)榭梢赃B接多個(gè)客戶端而不易產(chǎn)生數(shù)據(jù)包丟失成為不二選擇。但是異步通訊時(shí)用到的函數(shù)會(huì)有委托的回調(diào)函數(shù)。 四、基于 c/s 的 嵌入式遠(yuǎn)程監(jiān)控系統(tǒng)的設(shè)計(jì) (一)、服務(wù)器所要實(shí)現(xiàn)的功能 1.服務(wù)器要實(shí)現(xiàn)的功能分析。 第一,接到警報(bào)后提示(根據(jù) ip 查找冷庫(kù)編號(hào),顯示冷庫(kù)編號(hào)及超標(biāo)情況)。 第二,接收冷庫(kù)數(shù)據(jù),查找相應(yīng)的冷庫(kù)編號(hào),加上時(shí)間插入數(shù)據(jù)庫(kù)。 第三,接到嵌入式設(shè)備發(fā)送的第三種消息,根據(jù) ip 查找相應(yīng)的最高溫度,最低溫度,采樣時(shí)間,發(fā)送給嵌入式。 第四,身份檢驗(yàn)及登陸。 第五,更改各種存放物品的最高溫度,最低溫度,采樣時(shí)間,同時(shí)發(fā)送給嵌入式。 第六,查詢數(shù)據(jù) :查詢冷庫(kù)表,同時(shí)更新;查詢溫度表,根據(jù)時(shí)間,溫度分別查詢。查詢 配置表,同時(shí)更新。 第七,刪除數(shù)據(jù) :刪除配置表;刪除冷庫(kù)表。 第八,更新冷庫(kù)表。 第九,修改主機(jī) ip 地址,并告知嵌入式設(shè)備。 2.采用 c/s 模式的原因 因?yàn)楣I(yè)控制不同于家庭控制,當(dāng)壓縮機(jī)失效時(shí)如果沒(méi)有人在將會(huì)造成嚴(yán)重的損失,所以機(jī)房要一直有人值班。因此沒(méi)必要將 pc 機(jī)上與嵌入式交互的部分做成 b/s 模式,使其在任何地方都能上網(wǎng)控制,這樣還會(huì)產(chǎn)生安全隱患,例如有人可以通過(guò)管理員的身份惡意更改配置參數(shù)。所以將此部分做成 c/s 模式,安裝在機(jī)房?jī)?nèi)的 pc 機(jī)上。 (二)、 c/s 結(jié)構(gòu)系統(tǒng)總體設(shè)計(jì) 1. c/s 結(jié)構(gòu)中服務(wù) 器的數(shù)據(jù)庫(kù)基本表結(jié)構(gòu) 冷庫(kù)表: 字段名稱 數(shù)據(jù)類型 可否為空 說(shuō)明 sh_id varchar 否 冷庫(kù)編號(hào) sh_thing varchar 是 存放物品 sh_ip varchar 是 相應(yīng)嵌入式設(shè)備的 ip 地址 配置表: 字段名稱 數(shù)據(jù)類型 可否為空 說(shuō)明 sh_thing varchar 否 存放物品 sh_max int 是 最高溫度 sh_min int 是 最低溫度 sh_time int 是 采樣間隔時(shí)間 溫度表: 字段名稱 數(shù)據(jù)類型 可否為空 說(shuō)明 sh_id varchar 否 冷庫(kù)編號(hào) sh_datetime datetime 是 采樣時(shí)間 sh_temp varchar 是 溫度 sh_thing varchar 是 存放物品 用戶表:(由于采用 c/s 模式,用戶權(quán)限只有一種,即超級(jí)用戶) 字段名稱 數(shù)據(jù)類型 可否為空 說(shuō)明 user_id varchar 否 用戶編號(hào)
點(diǎn)擊復(fù)制文檔內(nèi)容
研究報(bào)告相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1