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

正文內(nèi)容

基于armlinux的嵌入式圖像采集-資料下載頁

2024-11-17 22:08本頁面

【導(dǎo)讀】基于ARMLinux的嵌入式圖像采集。專業(yè)技術(shù)職務(wù)講師。山東輕工業(yè)學(xué)院本科生畢業(yè)設(shè)計(jì)(論文)。libjpeg庫進(jìn)行圖像數(shù)據(jù)的JPEG壓縮的使用流程..........21

  

【正文】 ress jpeg_start_press(amp。cinfo, TRUE)。 ?? ?? while ( height) { for (x = 0。 x row_stride。 x+=3) { buffer[x] = lpbuf[x+2]。 buffer[x+1] = lpbuf[x+1]。 buffer[x+2] = lpbuf[x]。 } jpeg_write_scanlines (amp。cinfo, row_pointer, 1)。//critical lpbuf += row_stride。 } Linux 下 Socket 編程 TCP/IP 簡介。 OSI協(xié)議參考模型是基于國際標(biāo)準(zhǔn)化組織發(fā)展起來的,分為 7層:應(yīng)用層、表示層、會話層、傳輸層、網(wǎng)絡(luò)層、數(shù)據(jù)鏈路層以及物理層。這個(gè)模型雖然規(guī)定的詳細(xì)細(xì)致,但是在實(shí)際中應(yīng)用卻并不廣泛,原因之一就是其過于復(fù)雜。但是它仍然是其他很多協(xié)議模型的基礎(chǔ),同時(shí)這種分層架構(gòu)的思想在很多領(lǐng)域都得到了廣泛的應(yīng)用。 TCP/IP 協(xié)議將 OSI 參考模型簡化為 4 層:應(yīng)用層、傳輸層、網(wǎng)絡(luò)層、網(wǎng)絡(luò)接口層。其一開始就遵循簡單明確的設(shè)計(jì)思路,有利于實(shí)現(xiàn)和使用。網(wǎng)絡(luò)接口層負(fù)責(zé)將二進(jìn)制流轉(zhuǎn)換為數(shù)據(jù)幀并進(jìn)行數(shù)據(jù)幀的發(fā)送與接收。網(wǎng)絡(luò)層負(fù)責(zé)將數(shù)據(jù)幀封裝為 IP 數(shù)據(jù)報(bào),并運(yùn)行必要的路由算法。傳輸層負(fù)責(zé)端對端之間的通信會話連接與建立。傳輸協(xié)議的選擇依據(jù)數(shù)據(jù)傳輸方式的不同分為數(shù)據(jù)控制協(xié)議山東輕工業(yè)學(xué)院本科生畢業(yè)設(shè)計(jì)(論文) 23 ( TCP)和用戶數(shù)據(jù)報(bào)協(xié)議( UDP)。應(yīng)用層負(fù)責(zé)應(yīng)用程序的網(wǎng)絡(luò)訪問,通過端口號來區(qū)別不同進(jìn)程。 網(wǎng)絡(luò)應(yīng)用程序的開發(fā)主要用到傳輸層的兩個(gè)協(xié)議: TCP 協(xié)議和 UDP 協(xié)議。盡管 TCP 協(xié)議和 UDP 協(xié)議都使用相同的 IP層協(xié)議,但是 TCP 協(xié)議向應(yīng)用層提 供的服務(wù)與 UDP 有很大的不同。 TCP協(xié)議向應(yīng)用層提供面向連接的可靠的數(shù)據(jù)服務(wù),而 UDP 協(xié)議向應(yīng)用層提供無連接的不可靠的數(shù)據(jù)傳輸服務(wù)。 TCP 協(xié)議在通信之前通信雙方必須建立連接,才能傳輸數(shù)據(jù)。在接收端每接收一幀數(shù)據(jù)都要給發(fā)送端發(fā)送一個(gè)確認(rèn)幀,當(dāng)發(fā)送端沒有接收到確認(rèn)幀,發(fā)送端會超時(shí)重傳,而在接收端會丟棄重復(fù)的數(shù)據(jù)幀。 TCP 協(xié)議的這種機(jī)制保證了通信雙方的可靠通信, TCP 協(xié)議這種高可靠性特性一般用來傳輸對數(shù)據(jù)可靠性較高的環(huán)境,比如在本系統(tǒng)中使用 TCP 協(xié)議來傳輸控制信息等等。 UDP 協(xié)議在通信之前通信雙方不建立連接, 發(fā)送端只需將數(shù)據(jù)發(fā)送到目的地址,而不用等待接收端的確認(rèn),接收端也不用發(fā)送確認(rèn)幀。很明顯, UDP 數(shù)據(jù)傳輸效率比 TCP 數(shù)據(jù)傳輸效率高,但是以犧牲可靠性為代價(jià)的。當(dāng)然 UDP 要想提供可靠地通信可以在應(yīng)用層進(jìn)行相關(guān)處理。 UDP 協(xié)議以其高效率等特點(diǎn)應(yīng)用越來越廣,特別是在現(xiàn)在多媒體通信等數(shù)據(jù)量比較大的應(yīng)用中,在本系統(tǒng)中 UDP協(xié)議用來傳輸圖像數(shù)據(jù)。 TCP 協(xié)議屬于傳輸層協(xié)議利用下層提供的服務(wù)向應(yīng)用層提供可靠地?cái)?shù)據(jù)傳輸服務(wù)。應(yīng)用進(jìn)程可以利用 TCP提供的服務(wù)實(shí)現(xiàn)不同應(yīng)用進(jìn)程之間的數(shù)據(jù)傳輸。TCP 協(xié)議利用 IP 地址和端口號來區(qū)分不 用的應(yīng)用的進(jìn)程,即 IP 地址和端口號可以唯一的區(qū)分網(wǎng)絡(luò)中的應(yīng)用進(jìn)程 [16]。 Socket 簡介。在 Linux 網(wǎng)絡(luò)編程中是通過 Socket 接口來進(jìn)行的。 Socket英文原義是“插座”的意思 。其實(shí) Socket 也非常類似于電話插座,通信的雙方式計(jì)算機(jī)網(wǎng)絡(luò)中的兩個(gè)應(yīng)用進(jìn)程, Socket 端口就是應(yīng)用進(jìn)程 IP 地址和端口,IP地址可以唯一的確定計(jì)算機(jī)網(wǎng)絡(luò)中的一臺電腦,而端口可以確定一臺計(jì)算機(jī)中一個(gè)應(yīng)用進(jìn)程,這樣就把通信雙方給唯一確定下來。在利用 Socket 進(jìn)行網(wǎng)絡(luò)編程時(shí),一個(gè)完整的套接字則是一個(gè)相關(guān)描述 {協(xié)議、本地 IP、應(yīng) 用端口、遠(yuǎn)程 IP、遠(yuǎn)程端口 }。 Socket 接口可以 看作 一種特殊的 I/O,它也是一個(gè)文件描述符。因此可以像打開文件的函數(shù)調(diào)用,該函數(shù)返回一個(gè)整形的 Socket 描述符,隨后的通信鏈路的建立、數(shù)據(jù)的傳輸?shù)炔僮鞫际峭ㄟ^ Socket 來完成。 Socket 類型有 3 中:流式套接字( SOCK_STREAM)、數(shù)據(jù)報(bào)套接字( SOCK_DGRAM)、原始套接字。 流式套接字對應(yīng)傳輸層的 TCP 協(xié)議,它提供可靠地面向連接的通信流,從而保證數(shù)據(jù)傳輸?shù)恼_性和順序性。數(shù)據(jù)報(bào)套接字對應(yīng)于傳輸層的 UDP 協(xié)議,它提供不可靠的無連接的通信流。 山東輕工業(yè)學(xué)院本科生畢業(yè)設(shè)計(jì)(論文) 24 客戶端 /服務(wù)器模式。 在 TCP/IP 網(wǎng)絡(luò)應(yīng)用中,通信的兩個(gè)進(jìn)程間相互作用的主要模式是客戶 /服務(wù)器模式( Client/Server model),即客戶向服務(wù)器發(fā)出服務(wù)請求,服務(wù)器接收到請求后,提供相應(yīng)的服務(wù)??蛻?/服務(wù)器模式的建立基于以下兩點(diǎn):首先,建立網(wǎng)絡(luò)的起因是網(wǎng)絡(luò)中軟硬件資源、運(yùn)算能力和信息不均等,需要共享,從而造就擁有眾多資源的主機(jī)提供服務(wù),資源較少的客戶請求服務(wù)這一非對等作用。其次,網(wǎng)間進(jìn)程通信完全是異步的,相互通信的進(jìn)程間既不存在父子關(guān)系,又不共享內(nèi)存緩沖區(qū),因此需要一種機(jī)制為希望通信的進(jìn)程間建 立聯(lián)系,為二者的數(shù)據(jù)交換提供同步,這就是基 于客戶端 /服務(wù)器模式的 TCP/IP。 基于 TCP 協(xié)議的客戶 /服務(wù)器架構(gòu)的服務(wù)器與客戶端的使用流程: 首先服務(wù)器端應(yīng)先啟動(dòng),根據(jù)請求提供相應(yīng)的服務(wù)。 服務(wù)器端的工作流程: 建立一個(gè)本地套接字 Socket(),設(shè)置服務(wù)端口; 將此套接字綁定在本地端口上 bind() 。 設(shè)置端口連接上限,并開始監(jiān)聽; 等待客戶端的連接,并獲取客戶端的套接字; 服務(wù)器與客戶端雙方開始數(shù)據(jù)通信; 關(guān)閉客戶端套接字,回到步驟 4 客戶端的工作流程: 建立一個(gè)套接字, 并設(shè)置服務(wù)器端的 IP 和端口; 連接服務(wù)器端; 與服務(wù)器之間進(jìn)行數(shù)據(jù)通信; 關(guān)閉套接字,本次通信結(jié)束; 基于 UDP 協(xié)議的客戶 /服務(wù)器架構(gòu)的使用流程: 首先服務(wù)器端啟動(dòng),等待客戶端的服務(wù)請求。 服務(wù)器端的工作流程: 創(chuàng)建本地套接字,并填充本地端口; 將套接字綁定到本地端口; 等待接收客戶端的用戶請求; 處理數(shù)據(jù)并向客戶端發(fā)送數(shù)據(jù); 回到步驟 3。 客戶端的工作流程: 創(chuàng)建套接字,并填充服務(wù)器端 IP 和端口號; 向服務(wù)器端發(fā)送請求服務(wù); 接收服務(wù)器端發(fā)送的數(shù)據(jù); 山東輕工業(yè)學(xué)院本科生畢業(yè)設(shè)計(jì)(論文) 25 關(guān)閉套 接字,客戶端退出。 服務(wù)器端網(wǎng)絡(luò)程序設(shè)計(jì)與編程實(shí)現(xiàn) 在服務(wù)器端既要向多個(gè)客戶端傳輸圖像數(shù)據(jù),又要與各個(gè)客戶端完成控制交互。圖像數(shù)據(jù)一般是比較大的,對傳輸效率要求較高,使用 UDP 協(xié)議來完成圖像數(shù)據(jù)的傳輸,而控制信息一般數(shù)據(jù)量是非常小的,但對可靠性要求較高,這里使用 TCP 協(xié)議來完成與客戶端的交互。 根據(jù)以上分析,本系統(tǒng)就要使用 TCP 和 UDP 兩種協(xié)議來完成。這樣就形成了兩個(gè)數(shù)據(jù)傳輸通道 —— 兩個(gè) Socket,兩個(gè)數(shù)據(jù)通道由兩個(gè)不同的線程完成相關(guān)的處理。 下面是服務(wù)器端網(wǎng)絡(luò)服務(wù)部分的流程圖 如圖 42: 網(wǎng) 絡(luò) 傳 輸 模 塊 流 程 圖網(wǎng) 絡(luò) 控 制 線 程創(chuàng) 建 傳 輸 控 制 套 接字s o c k e t ( )綁 定 本 地 端 口 6 7 6 8b i n d ( )開 始 監(jiān) 聽l i s t e n ( )創(chuàng) 建 監(jiān) 聽 線 程接 收 客 戶 端 的 連 接a c c e p t ( )創(chuàng) 建 子 服 務(wù) 線 程繼 續(xù) 接 收客 戶 端 連接讀 取 客 戶 端 的 I P 地址 g e t p e e r n a m e ( )創(chuàng) 建 用 戶 數(shù) 據(jù) 報(bào) 套接 字 s o c k e t ( )新 的 一 幀 數(shù) 據(jù) ?讀 取 客 戶 端 的 狀 態(tài)該 用 戶 處 于 監(jiān)控 狀 態(tài) ?向 用 戶 發(fā) 送 監(jiān) 控 數(shù)據(jù)Y E SY E SN O所 有 的 用 戶 都發(fā) 送 完 了 ?N O讀 取 下一 個(gè) 用戶N O創(chuàng) 建 網(wǎng) 絡(luò) 傳 輸 線 程組 建 客 戶 端 地 址I P 地 址 和 端 口 號網(wǎng) 絡(luò) 傳 輸 線 程 圖 42 網(wǎng)絡(luò)傳輸模塊流程圖 根據(jù)以上流程圖 服務(wù)器端圖像數(shù)據(jù)傳輸程序的部分實(shí)現(xiàn): 山東輕工業(yè)學(xué)院本科生畢業(yè)設(shè)計(jì)(論文) 26 //Thread service function void *thread_udpSocket(pthread_mutex_t *capture_lock) { ?? ?? hudpsockfd=Socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP) 。 while(1) { ?? //lock pthread_mutex_lock(capture_lock) 。 t=0 。 //open file file=fopen(,r) 。 ?? ?? //出錯(cuò)處理 ret=fread(tempbuf,1,65535,file) 。 if(ret==1) ?? else { //向每個(gè)在線用戶發(fā)送數(shù)據(jù) for(i=0。i10。i++) { if(client_queque[i]==NULL) continue 。 if(client_queque[i]state==false) continue 。 ret=sendto(hudpsockfd,tempbuf,ret,0,(struct sockaddr *)amp。(client_queque[i]add_client), sin_size) 。 ?? ?? } } //close file fclose(file) 。 //unlock 山東輕工業(yè)學(xué)院本科生畢業(yè)設(shè)計(jì)(論文) 27 pthread_mutex_unlock(capture_lock) 。 } exit: close(hudpsockfd) 。 printf(udpSocket thread exited!\n) 。 } 服務(wù)器網(wǎng)絡(luò)控制程序的部分實(shí)現(xiàn): //監(jiān)聽線程 ,用于監(jiān)聽客戶端連接 void *thread_tcpSocket(pthread_mutex_t *capture_lock) { ?? // while(1) { //accept remote link for(index=0。index10。) { if(client_queque[index]==NULL) { hntcpsockfd=accept(htcpsockfd, (struct sockaddr *)amp。addr_tcpremote, amp。sin_size) 。 ?? client_queque[index]= (client*)malloc(sizeof(client)) 。 client_queque[index]hntcpsockfd=hntcpsockfd 。 ++index 。 pthread_create(hthread_child,NULL,(void *)thread_childSocket,client_queque[index1]) 。 if(index==10) { index=0 。 ?? exit: ?? } //子線程處理函數(shù) ,用來處理每個(gè)連接的客戶端交互 void *thread_childSocket(client *lpclient) 山東輕工業(yè)學(xué)院本科生畢業(yè)設(shè)計(jì)(論文) 28 { ?? while(1) { //clear buffer memset(lpclientrecvbuf,39。\039。,LENGTH) 。 num=recv(lpclienthntcpsockfd,lpclientrecvbuf,LENGTH,0) 。 ?? temp=(lpclientrecvbuf)[0] 。 switch(temp) { case LOGIN : if(strcmp((lpclientrecvbuf)+1,user)==0) { (lpclientrecvbuf)[0]=LOGIN_SUCCESS 。 (lpclientrecvbuf)[1]=39。\039。 。 } else { (lpclientrecvbuf)[0]=LOGIN_FAILED 。 (lpclientrecvbuf)[1]=39。\039。 。 } send(lpcli
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1