版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、一、 通过TCP/IP协议通信:1.目标:将PC机中C盘目录下的a.bmp文件通过网口传递给66782.准备工作:(CCSv5.2;C+2010;EVM6678L)1).将PC的IP设为192.168.2.101 2).将6678设为静态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);/创建基于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()为字节序转换函数,由于计算机字节序
5、和网络字节序相反,需通过上述函/数进行变换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位真彩色图像,本程序只对上述条件成立的图像才能正确执行。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;/开始发送位图数据int count=2359296;/需要发送的总字节数1024*768*3char *pbuf=bmpBuf00; /用于指定未发字符的开头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;/发送位图数据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<<"发送成功!"<<endl;if(count=0)cout<<"全部发送成功!"<<endl;end:/缓存释放infile.close();infile.clear();closesocket(sockClien
12、t);WSACleanup();2)6678端程序程序改自helloworld例程运行流程如下:main()BIOS_start()主线程StackTest()网络服务循环: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的优先级;OS_TASKSTKNORM:该task的堆栈尺寸0:传递给回调函数的参数1:回调函数实体的
14、最大个数(UDP必须为1)因此采用不同的传输层协议时(TCP或UDP)需对应的更改第一、第四和最后一个参数。且在hello.c的开头对相应的回调函数进行申明:externintdtask_tcp_hello();同时建立一个用于存放图片数据的buffercharbufqgp76810243;当有基于TCP的网络服务请求时创建一个新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)程序执行流程:先执行CCS中的程序,使6678中的服务器程序处于待命状态,再运行C+中的程序,查看6678中接收到的图片数据:Windowsshow viewexpressionsadd new expressions输入bufqgp后回车,就能看到bufqgp中的变量值或者在show viewmem
18、ory browser中输入bufqgp的首地址0x80300098就可看到对应存储空间的内容用CCS中的Image Analyzer查看bufqgp中的图片数据:ToolsImage Analyzer右击空白选择properties参考网址:用wireshark软件监测计算机与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字节。 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. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025会议 展览合同
- 2025机动车买卖合同模板
- 运输类合同范本
- 南宁房屋租赁服务合同模板
- 2025建筑施工物资租赁合同示范文本无担保方
- 鸡蛋供货采购合同
- 借款用于投资合同
- 技能培训中的表达技巧训练
- 2025年浙教版必修二物理下册阶段测试试卷
- 快速学习的技能培训课程设计与实施
- 2024年资格考试-对外汉语教师资格证笔试参考题库含答案
- 2024年4月自考02382管理信息系统答案及评分参考
- (苏版)初三化学上册:第2单元课题1空气
- 2023年12月广东珠海市轨道交通局公开招聘工作人员1人笔试近6年高频考题难、易错点荟萃答案带详解附后
- 腹腔镜肾上腺肿瘤切除术查房护理课件
- 燃气罩式炉应急预案
- 专题23平抛运动临界问题相遇问题类平抛运和斜抛运动
- 超声科医德医风制度内容
- 高三开学收心班会课件
- 蒸汽换算计算表
- 四年级计算题大全(列竖式计算,可打印)
评论
0/150
提交评论