版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、一、 通過(guò)TCP/IP協(xié)議通信:1.目標(biāo):將PC機(jī)中C盤(pán)目錄下的a.bmp文件通過(guò)網(wǎng)口傳遞給66782.準(zhǔn)備工作:(CCSv5.2;C+2010;EVM6678L)1).將PC的IP設(shè)為192.168.2.101 2).將6678設(shè)為靜態(tài)IP和No Boot模式,各按鍵設(shè)置如圖所示。3).編譯PC端C+程序時(shí),需添加相應(yīng)的網(wǎng)絡(luò)應(yīng)用的庫(kù)函數(shù)WS_32.lib。具體步驟如下:項(xiàng)目XXX(文件名)屬性配置屬性鏈接器輸入附加依賴(lài)項(xiàng)WS_32.lib3.程序說(shuō)明: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程序端口號(hào)/初始化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協(xié)議的SOCKET,參數(shù)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地址,通信協(xié)議類(lèi)型,和程序端口號(hào),/6678作為服務(wù)器addrSrv,PC端做客戶端addrCliaddrCli.sin_family=AF_INET;/通信協(xié)議addrCli.sin_addr.S_un.S_addr=inet_addr("192.168.2.101");/IPaddrCli.sin_port=htons(500);/端口號(hào)/inet_addr()和htons()為字節(jié)序轉(zhuǎn)換函數(shù),由于計(jì)算機(jī)字節(jié)序
5、和網(wǎng)絡(luò)字節(jié)序相反,需通過(guò)上述函/數(shù)進(jìn)行變換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進(jìn)行綁定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位圖數(shù)據(jù)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)/判斷有無(wú)彩色板,以及/是否是24位真彩色圖像,本程序只對(duì)上述條件成立的圖像才能正確執(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;/開(kāi)始發(fā)送位圖數(shù)據(jù)int count=2359296;/需要發(fā)送的總字節(jié)數(shù)1024*768*3char *pbuf=bmpBuf00; /用于指定未發(fā)字符的開(kāi)頭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ā)送位圖數(shù)據(jù)iLen=recv(sockClient,&ack,1,0);/接收6678返回的收到確認(rèn)信息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例程運(yùn)行流程如下:main()BIOS_start()主線程StackTest()網(wǎng)絡(luò)服務(wù)循環(huán):do rc = NC_NetStart( hCfg, NetworkOpen, NetworkClose, NetworkIPAddr ); while(rc> 0 );其中NetworkOpen用于新建一個(gè)基于socket的daemon進(jìn)程,用于偵聽(tīng)和服務(wù)網(wǎng)口的通信請(qǐng)求staticvoidNetworkOpen()/ Create our local serverhHello = DaemonNew( SOCK_S
13、TREAM, 0, 700, dtask_tcp_hello, OS_TASKPRINORM, OS_TASKSTKNORM, 0, 1 );SOCK_STREAM:表示該daemon進(jìn)程中的socket類(lèi)型為T(mén)CP,UDP對(duì)應(yīng)的是SOCK_DGRAM;0:該參數(shù)為本地IP,0表示任意;700:程序端口號(hào);dtask_tcp_hello:回調(diào)函數(shù)指針,當(dāng)有網(wǎng)絡(luò)通信請(qǐng)求時(shí),調(diào)用該函數(shù),udp對(duì)應(yīng)的回調(diào)函數(shù)指針是dtask_udp_hello;OS_TASKPRINORM:為回調(diào)函數(shù)生成的task的優(yōu)先級(jí);OS_TASKSTKNORM:該task的堆棧尺寸0:傳遞給回調(diào)函數(shù)的參數(shù)1:回調(diào)函數(shù)實(shí)體的
14、最大個(gè)數(shù)(UDP必須為1)因此采用不同的傳輸層協(xié)議時(shí)(TCP或UDP)需對(duì)應(yīng)的更改第一、第四和最后一個(gè)參數(shù)。且在hello.c的開(kāi)頭對(duì)相應(yīng)的回調(diào)函數(shù)進(jìn)行申明:externintdtask_tcp_hello();同時(shí)建立一個(gè)用于存放圖片數(shù)據(jù)的buffercharbufqgp76810243;當(dāng)有基于TCP的網(wǎng)絡(luò)服務(wù)請(qǐng)求時(shí)創(chuàng)建一個(gè)新task,調(diào)用dtask_tcp_hello();#include<xdc/runtime/System.h>/qgp#include<ti/ndk/inc/netmain.h>externcharbufqgp76810243; /存儲(chǔ)圖像/
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中的服務(wù)器程序處于待命狀態(tài),再運(yùn)行C+中的程序,查看6678中接收到的圖片數(shù)據(jù):Windowsshow viewexpressionsadd new expressions輸入bufqgp后回車(chē),就能看到bufqgp中的變量值或者在show viewmem
18、ory browser中輸入bufqgp的首地址0x80300098就可看到對(duì)應(yīng)存儲(chǔ)空間的內(nèi)容用CCS中的Image Analyzer查看bufqgp中的圖片數(shù)據(jù):ToolsImage Analyzer右擊空白選擇properties參考網(wǎng)址:用wireshark軟件監(jiān)測(cè)計(jì)算機(jī)與6678間的數(shù)據(jù)包通信:參考網(wǎng)址:附:bmp文件格式說(shuō)明:如某BMP文件開(kāi)頭: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文件可分為四個(gè)部分:位圖文件頭、位圖信息頭、彩色板、圖像數(shù)據(jù)陣列,在上圖中已用*分隔。 一、圖像文件頭 1)1:圖像文件頭。424Dh="BM",表示是Windows支持的BMP格式。 2)2-3:整個(gè)文件大小。4690 0000,為00009046h=36934。 3)4-5:保留,必須設(shè)置為0。 4)6-7:從文件開(kāi)始到位圖數(shù)據(jù)之間的偏移量。4600 0000,為00000046h=70,上面的文件頭就是35字=70字節(jié)。 5)8-9:位圖圖信息頭長(zhǎng)度。 6)10-11:位圖寬度,以像素為單位。8000 0000,為00000080h=128。 7)12-13:位圖高度,以像素為單位。9000 0000,為00000090h=144。 8)14:位圖的位面數(shù),該值總是1。0100,為0001h=1。二、位圖信息頭 9)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 餐廳服務(wù)質(zhì)量提升-個(gè)性化服務(wù)與培訓(xùn)趨勢(shì)
- 小學(xué)生心理健康教育實(shí)施方案
- 山東省 膠州市2024~2025學(xué)年 七年級(jí)上學(xué)期 第一次月考英語(yǔ)試卷(無(wú)答案)
- 《帶著誠(chéng)信考試 力爭(zhēng)理想成績(jī)》期中考試誠(chéng)信教育及心理調(diào)適指導(dǎo)班會(huì)課件
- 2024至2030年中國(guó)號(hào)碼隨意組合式導(dǎo)線標(biāo)志燙印機(jī)數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2024至2030年中國(guó)側(cè)邊鎖頭數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 新疆2017年中考化學(xué)真題(含答案)
- 集團(tuán)客戶策略
- 2024年中國(guó)圓錐破市場(chǎng)調(diào)查研究報(bào)告
- ASME標(biāo)準(zhǔn)講解4ASME具體材料
- 心臟起搏器植入指南解讀
- 小學(xué)語(yǔ)文部編版六年級(jí)上冊(cè)全冊(cè)課堂作業(yè)新設(shè)計(jì)
- 酒店管理的安全與衛(wèi)生管理
- 蘇教版小學(xué)數(shù)學(xué)五年級(jí)上冊(cè)第四單元《小數(shù)加法和減法》 大單元作業(yè)設(shè)計(jì)
- 蔬菜種植方案
- 設(shè)備管理的設(shè)備績(jī)效績(jī)效指標(biāo)和評(píng)價(jià)體系
- 2024北京市海淀區(qū)初三英語(yǔ)一模
- 《休閑觀光農(nóng)業(yè)》課件
- 怎樣預(yù)防糧食埋人事故
- 中藥封包治療護(hù)理課件
- 運(yùn)維人員安全意識(shí)培訓(xùn)內(nèi)容
評(píng)論
0/150
提交評(píng)論