




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、一、 通過TCP/IP協(xié)議通信:1.目標:將PC機中C盤目錄下的a.bmp文件通過網(wǎng)口傳遞給66782.準備工作:(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+程序時,需添加相應(yīng)的網(wǎng)絡(luò)應(yīng)用的庫函數(shù)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協(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é)議類型,和程序端口號,/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);/端口號/inet_addr()和htons()為字節(jié)序轉(zhuǎn)換函數(shù),由于計算機字節(jié)序
5、和網(wǎng)絡(luò)字節(jié)序相反,需通過上述函/數(shù)進行變換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位圖數(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)/判斷有無彩色板,以及/是否是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ā)送位圖數(shù)據(jù)int count=2359296;/需要發(fā)送的總字節(jié)數(shù)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ā)送位圖數(shù)據(jù)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()網(wǎng)絡(luò)服務(wù)循環(huán):do rc = NC_NetStart( hCfg, NetworkOpen, NetworkClose, NetworkIPAddr ); while(rc> 0 );其中NetworkOpen用于新建一個基于socket的daemon進程,用于偵聽和服務(wù)網(wǎ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進程中的socket類型為TCP,UDP對應(yīng)的是SOCK_DGRAM;0:該參數(shù)為本地IP,0表示任意;700:程序端口號;dtask_tcp_hello:回調(diào)函數(shù)指針,當有網(wǎng)絡(luò)通信請求時,調(diào)用該函數(shù),udp對應(yīng)的回調(diào)函數(shù)指針是dtask_udp_hello;OS_TASKPRINORM:為回調(diào)函數(shù)生成的task的優(yōu)先級;OS_TASKSTKNORM:該task的堆棧尺寸0:傳遞給回調(diào)函數(shù)的參數(shù)1:回調(diào)函數(shù)實體的
14、最大個數(shù)(UDP必須為1)因此采用不同的傳輸層協(xié)議時(TCP或UDP)需對應(yīng)的更改第一、第四和最后一個參數(shù)。且在hello.c的開頭對相應(yīng)的回調(diào)函數(shù)進行申明:externintdtask_tcp_hello();同時建立一個用于存放圖片數(shù)據(jù)的buffercharbufqgp76810243;當有基于TCP的網(wǎng)絡(luò)服務(wù)請求時創(chuàng)建一個新task,調(diào)用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中的服務(wù)器程序處于待命狀態(tài),再運行C+中的程序,查看6678中接收到的圖片數(shù)據(jù):Windowsshow viewexpressionsadd new expressions輸入bufqgp后回車,就能看到bufqgp中的變量值或者在show viewmem
18、ory browser中輸入bufqgp的首地址0x80300098就可看到對應(yīng)存儲空間的內(nèi)容用CCS中的Image Analyzer查看bufqgp中的圖片數(shù)據(jù):ToolsImage Analyzer右擊空白選擇properties參考網(wǎng)址:用wireshark軟件監(jiān)測計算機與6678間的數(shù)據(jù)包通信:參考網(wǎng)址:附: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文件可分為四個部分:位圖文件頭、位圖信息頭、彩色板、圖像數(shù)據(jù)陣列,在上圖中已用*分隔。 一、圖像文件頭 1)1:圖像文件頭。424Dh="BM",表示是Windows支持的BMP格式。 2)2-3:整個文件大小。4690 0000,為00009046h=36934。 3)4-5:保留,必須設(shè)置為0。 4)6-7:從文件開始到位圖數(shù)據(jù)之間的偏移量。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:位圖的位面數(shù),該值總是1。0100,為0001h=1。二、位圖信息頭 9)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 師資共享與教育信息化建設(shè)及人才培養(yǎng)協(xié)議
- 盤扣式腳手架租賃與現(xiàn)場安全管理服務(wù)協(xié)議
- 電子煙企業(yè)產(chǎn)品召回與消費者權(quán)益保護服務(wù)合同
- 股權(quán)激勵與員工持股計劃實施協(xié)議
- 碳中和戰(zhàn)略規(guī)劃與實施指導(dǎo)協(xié)議
- 政府基礎(chǔ)設(shè)施建設(shè)項目材料供應(yīng)合同
- 視頻號網(wǎng)紅電商合作運營協(xié)議
- 犯罪所得財產(chǎn)分割與追繳流程協(xié)議
- 影視作品改編權(quán)及衍生品生產(chǎn)市場推廣合同
- 親子早教中心兒童美術(shù)教育項目合作協(xié)議
- 誤差理論分析課件
- 口腔醫(yī)院與美容院合作讓您的笑容更加燦爛
- 中建工程質(zhì)量管理制度
- 六年級上冊語文第3課《古詩詞三首》同步練習(xí)(含答案)
- 倉庫呆滯庫存處理方法培訓(xùn)課件
- 常用護理評估工具-產(chǎn)科VTE風(fēng)險評估
- 幾種泄流曲線計算程序
- 大氣層情況介紹
- 汽車維修安全生產(chǎn)責(zé)任書
- 小學(xué)英語時態(tài)專項練習(xí)及小學(xué)英語四大時態(tài)測試題
- 養(yǎng)老護理員安全防護-職業(yè)防護與壓力應(yīng)對
評論
0/150
提交評論