電腦與6678通過網(wǎng)口通信_第1頁
電腦與6678通過網(wǎng)口通信_第2頁
電腦與6678通過網(wǎng)口通信_第3頁
電腦與6678通過網(wǎng)口通信_第4頁
電腦與6678通過網(wǎng)口通信_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、一、 通過TCP/IP協(xié)議通信:1.目標:將PC機中C盤目錄下的a.bmp文件通過網(wǎng)口傳遞給66782.準備工作:(CCSv5.2;C+2010;EVM6678L)1).將PC的IP設為192.168.2.101 2).將6678設為靜態(tài)IP和No Boot模式,各按鍵設置如圖所示。3).編譯PC端C+程序時,需添加相應的網(wǎ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作為服務器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)絡字節(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)絡服務循環(huán):do rc = NC_NetStart( hCfg, NetworkOpen, NetworkClose, NetworkIPAddr ); while(rc> 0 );其中NetworkOpen用于新建一個基于socket的daemon進程,用于偵聽和服務網(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對應的是SOCK_DGRAM;0:該參數(shù)為本地IP,0表示任意;700:程序端口號;dtask_tcp_hello:回調(diào)函數(shù)指針,當有網(wǎng)絡通信請求時,調(diào)用該函數(shù),udp對應的回調(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)需對應的更改第一、第四和最后一個參數(shù)。且在hello.c的開頭對相應的回調(diào)函數(shù)進行申明:externintdtask_tcp_hello();同時建立一個用于存放圖片數(shù)據(jù)的buffercharbufqgp76810243;當有基于TCP的網(wǎng)絡服務請求時創(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中的服務器程序處于待命狀態(tài),再運行C+中的程序,查看6678中接收到的圖片數(shù)據(jù):Windowsshow viewexpressionsadd new expressions輸入bufqgp后回車,就能看到bufqgp中的變量值或者在show viewmem

18、ory browser中輸入bufqgp的首地址0x80300098就可看到對應存儲空間的內(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:保留,必須

20、設置為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)15:每個像素的位數(shù)。有1(單色),4(16色),8(256色),16(64K色,高彩色),24(

21、16M色,真彩色),32(4096M色,增強型真彩色)。1000為0010h=16。 10)16-17:壓縮說明:有0(不壓縮),1(RLE 8,8位RLE壓縮),2(RLE 4,4位RLE壓縮,3(Bitfields,位域存放)。RLE簡單地說是采用像素數(shù)+像素值的方式進行壓縮。T408采用的是位域存放方式,用兩個字節(jié)表示一個像素,位域分配為r5b6g5。圖中0300 0000為00000003h=3。 11)18-19:用字節(jié)數(shù)表示的位圖數(shù)據(jù)的大小,該數(shù)必須是4的倍數(shù),數(shù)值上等于位圖寬度×位圖高度×每個像素位數(shù)。0090 0000為00009000h=80×90×2h=36864。 12)20-21:用象素/米表示的水平分辨率。A00F 0000為0000 0FA0h=4000。 13)22-23:用象素/米表示的垂直分辨率。A00F 0000為0000 0FA0h=4000。 14)24-25:位圖使用的顏色

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論