




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、一、 通過TCP/IP協議通信:1.目標:將PC機中C盤目錄下的a.bmp文件通過網口傳遞給66782.準備工作:(CCSv5.2;C+2010;EVM6678L)1).將PC的IP設為192.168.2.101 2).將6678設為靜態(tài)IP和No Boot模式,各按鍵設置如圖所示。3).編譯PC端C+程序時,需添加相應的網絡應用的庫函數WS_32.lib。具體步驟如下:項目XXX(文件名)屬性配置屬性鏈接器輸入附加依賴項WS_32.lib3.程序說明:1)PC端C+程序#include<winsock2.h>#include<iostream>usingnamespa
2、cestd;#include<string.h>#include<fstream>#include<wingdi.h>int main()constint DEFAULT_PORT=700;/6678程序端口號/初始化WORD wVerisonRequested;WSADATA wsaData;interr,iLen=0;wVerisonRequested=MAKEWORD(2,2);err=WSAStartup(wVerisonRequested,&wsaData);if(err!=0)cout<<"加載WinSock失?。?
3、quot;return 0;cout<<"加載WinSock成功!"<<endl;/SOCKET sockClient=socket(AF_INET,SOCK_STREAM,0);/創(chuàng)建基于TCP協議的SOCKET,參數SOCKET_STREAM:TCP;SOCKET_DGRAM:UDP.if(sockClient=INVALID_SOCKET)cout<<"socket() fail:"<<WSAGetLastError()<<endl;return 0;cout<<"s
4、ocket()successful!"<<endl;SOCKADDR_IN addrSrv,addrCli;/初始化PC端和6678端的IP地址,通信協議類型,和程序端口號,/6678作為服務器addrSrv,PC端做客戶端addrCliaddrCli.sin_family=AF_INET;/通信協議addrCli.sin_addr.S_un.S_addr=inet_addr("192.168.2.101");/IPaddrCli.sin_port=htons(500);/端口號/inet_addr()和htons()為字節(jié)序轉換函數,由于計算機字節(jié)序
5、和網絡字節(jié)序相反,需通過上述函/數進行變換addrSrv.sin_family=AF_INET;addrSrv.sin_addr.S_un.S_addr=inet_addr("192.168.2.100"); addrSrv.sin_port=htons(DEFAULT_PORT);/將PC端的socket與6678端的socket進行綁定err=bind(sockClient,(SOCKADDR*)&addrCli,sizeof(SOCKADDR);if (err!=0)cout<<"bind()fail:"<<WSAG
6、etLastError()<<endl;return 0;cout<<"bind()successful!"<<endl; /讀入a.bmp文件ifstreaminfile("C:a.bmp",ios:binary);staticcharbmpBuf76810243,ack;/bmpBuf用于存放讀入的bmp位圖數據BITMAPFILEHEADER bmpHeader,*pbmpHeader=&bmpHeader;/用于存放bmp文件頭memset(pbmpHeader,0,sizeof(BITMAPFILEH
7、EADER);BITMAPINFOHEADER bmpInfoHeader,*pbmpInfoHeader=&bmpInfoHeader;/用于存放bmp位圖信息/頭memset(pbmpInfoHeader,0,sizeof(BITMAPINFOHEADER);infile.read (char*)pbmpHeader,sizeof(BITMAPFILEHEADER);/讀入bmp文件頭infile.read(char*)pbmpInfoHeader,sizeof(BITMAPINFOHEADER);/讀入bmp位圖信息頭cout<<hex<<bmpHeade
8、r.bfOffBits<<endl;cout<<hex<<bmpInfoHeader.biBitCount<<endl;cout<<sizeof(bmpBuf)<<endl;if(bmpHeader.bfOffBits=0x36&&bmpInfoHeader.biBitCount=0x18)/判斷有無彩色板,以及/是否是24位真彩色圖像,本程序只對上述條件成立的圖像才能正確執(zhí)行。infile.read(char*)bmpBuf,sizeof(bmpBuf);/讀入位圖信息elsegoto end;/連接PC
9、和6678err=connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR);if (err=INVALID_SOCKET)cout<<"connect()fail:"<<WSAGetLastError()<<endl;return 0;cout<<"連接成功!"<<endl;/開始發(fā)送位圖數據int count=2359296;/需要發(fā)送的總字節(jié)數1024*768*3char *pbuf=bmpBuf00; /用于指定未發(fā)字符的開頭f
10、or(err=0;count>0;count-=err)pbuf+=err;err=send(sockClient,pbuf,1024,0);if(err=SOCKET_ERROR)cout<<"send()fail:"<<WSAGetLastError()<<endl;return 0;/發(fā)送位圖數據iLen=recv(sockClient,&ack,1,0);/接收6678返回的收到確認信息if(iLen=0)cout<<"No receive!"<<endl;return 0
11、;if(iLen=SOCKET_ERROR)cout<<"recv()fail:"<<WSAGetLastError()<<endl;return 0;cout<<hex<<ack<<endl;cout<<"發(fā)送成功!"<<endl;if(count=0)cout<<"全部發(fā)送成功!"<<endl;end:/緩存釋放infile.close();infile.clear();closesocket(sockClien
12、t);WSACleanup();2)6678端程序程序改自helloworld例程運行流程如下:main()BIOS_start()主線程StackTest()網絡服務循環(huán):do rc = NC_NetStart( hCfg, NetworkOpen, NetworkClose, NetworkIPAddr ); while(rc> 0 );其中NetworkOpen用于新建一個基于socket的daemon進程,用于偵聽和服務網口的通信請求staticvoidNetworkOpen()/ Create our local serverhHello = DaemonNew( SOCK_S
13、TREAM, 0, 700, dtask_tcp_hello, OS_TASKPRINORM, OS_TASKSTKNORM, 0, 1 );SOCK_STREAM:表示該daemon進程中的socket類型為TCP,UDP對應的是SOCK_DGRAM;0:該參數為本地IP,0表示任意;700:程序端口號;dtask_tcp_hello:回調函數指針,當有網絡通信請求時,調用該函數,udp對應的回調函數指針是dtask_udp_hello;OS_TASKPRINORM:為回調函數生成的task的優(yōu)先級;OS_TASKSTKNORM:該task的堆棧尺寸0:傳遞給回調函數的參數1:回調函數實體的
14、最大個數(UDP必須為1)因此采用不同的傳輸層協議時(TCP或UDP)需對應的更改第一、第四和最后一個參數。且在hello.c的開頭對相應的回調函數進行申明:externintdtask_tcp_hello();同時建立一個用于存放圖片數據的buffercharbufqgp76810243;當有基于TCP的網絡服務請求時創(chuàng)建一個新task,調用dtask_tcp_hello();#include<xdc/runtime/System.h>/qgp#include<ti/ndk/inc/netmain.h>externcharbufqgp76810243; /存儲圖像/
15、dtask_tcp_hello() - TCP Echo Server Daemon Function/ (SOCK_DGRAM, port 7)/ Returns "1" if socket 's' is still open, and "0" if its been closed/intdtask_tcp_hello( SOCKET s, UINT32 unused )structtimeval to;int i=0,count=2359296;char *pBuf=bufqgp00,rec=65; (void)unused;/ Co
16、nfigure our socket timeout to be 3 secondsto.tv_sec = 3;to.tv_usec = 0;setsockopt( s, SOL_SOCKET, SO_SNDTIMEO, &to, sizeof( to ) );setsockopt( s, SOL_SOCKET, SO_RCVTIMEO, &to, sizeof( to ) );for(;count!=0;count-=i) i = (int)recv( s, (void *)pBuf, count, 0 );/ Spit any data back outif(i>0)
17、 send( s, &rec, 1,0 );pBuf+=i; elsebreak; / Since the socket is still open, return "1"/ (we need to leave UDP sockets open)return(1);4)程序執(zhí)行流程:先執(zhí)行CCS中的程序,使6678中的服務器程序處于待命狀態(tài),再運行C+中的程序,查看6678中接收到的圖片數據:Windowsshow viewexpressionsadd new expressions輸入bufqgp后回車,就能看到bufqgp中的變量值或者在show viewmem
18、ory browser中輸入bufqgp的首地址0x80300098就可看到對應存儲空間的內容用CCS中的Image Analyzer查看bufqgp中的圖片數據:ToolsImage Analyzer右擊空白選擇properties參考網址:用wireshark軟件監(jiān)測計算機與6678間的數據包通信:參考網址:附:bmp文件格式說明:如某BMP文件開頭:424D 4690 0000 0000 0000 4600 0000 2800 0000 8000 0000 9000 0000 0100*1000 0300 0000 0090 0000 A00F 0000 A00F 0000 0000 0
19、000 0000 0000*00F8 0000 E007 0000 1F00 0000 0000 0000*02F1 84F1 04F1 84F1 84F1 06F2 84F1 06F2 04F2 86F2 06F2 86F2 86F2 . .BMP文件可分為四個部分:位圖文件頭、位圖信息頭、彩色板、圖像數據陣列,在上圖中已用*分隔。 一、圖像文件頭 1)1:圖像文件頭。424Dh="BM",表示是Windows支持的BMP格式。 2)2-3:整個文件大小。4690 0000,為00009046h=36934。 3)4-5:保留,必須設置為0。 4)6-7:從文件開始到位圖數據之間的偏移量。4600 0000,為00000046h=70,上面的文件頭就是35字=70字節(jié)。 5)8-9:位圖圖信息頭長度。 6)10-11:位圖寬度,以像素為單位。8000 0000,為00000080h=128。 7)12-13:位圖高度,以像素為單位。9000 0000,為00000090h=144。 8)14:位圖的位面數,該值總是1。0100,為0001h=1。二、位圖信息頭 9)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024-2025學年浙江省臺金七校聯盟高一下學期期中聯考生物試題及答案
- 柔性電子材料的發(fā)展考核試卷
- 化學礦在鋼鐵冶煉中的除雜技術考核試卷
- 綠色光纜制造產業(yè)鏈構建考核試卷
- 運動賽事組織與管理考核試卷
- 綠色建筑認證體系培訓考核試卷
- 動物用藥店財務風險管理能力風險考核試卷
- 光學干涉法校準技術原理與應用考核試卷
- 上海安??荚囋囶}及答案
- 農業(yè)機械化與農業(yè)標準化生產考核試卷
- 《國有企業(yè)招投標及采購管理辦法》
- GB/T 16451-2008天然脂肪醇
- GB 5013.2-1997額定電壓450/750V及以下橡皮絕緣電纜第2部分:試驗方法
- 普通高中物理課程標準
- 國家開放大學《監(jiān)督學》形考任務( 1-4)試題和答案解析
- 完工付款最終付款申請表
- 人工動靜脈內瘺
- 新版(七步法案例)PFMEA
- 慢阻肺隨訪記錄表正式版
- 廣西大學數學建模競賽選拔賽題目
- 受戒申請表(共3頁)
評論
0/150
提交評論