您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 基于C++-Builder的网络调试助手设计与实现
龙源期刊网的网络调试助手设计与实现作者:李玉石来源:《品牌与标准化》2015年第05期【摘要】工程应用中为了方便仪器设备的调试和参数设置,应用C++Builder开发平台,设计并实现了网络调试助手软件。程序除了支持TCP、UDP协议(集成服务器和客户端),还具备间隔发送,文件导入导出等诸多功能,提高了网络通信设备的调试效率。【关键词】C++Builder调试助手TCPUDP【DOI编码】10.3969/j.issn.1674-4977.2015.05.018在工业设备开发调试中,特别是基于网络设备的数据采集和远程控制过程中,网络调试工具软件类似串口调试助手一样,作为一种灵活方便的通讯方式被广泛的应用。由于涉及到TCP及UDP的Socket编程,网络调试程序的开发与串口调试程序比较更加的复杂。1参数设置1.1新建Socket网络调试助手由网络设置、接收区设置、发送区设置和数据接收和发送区几个部分构成。网络设置包括协议类型,本地IP地址及本地端口号几个部分。程序首先需要新建一个Socket,进行添加。MySocket=newTcmSocket(this);MySocket有多个相关事件,包括:数据接收、上线连接、下线断开、出现错误、发送接收缓存区大小等参数[1]。//网络设置设置MySocket=newTcmSocket(this);MySocket-OnAccept=MySocketAccept;MySocket-OnActiveChanged=MySocketActiveChanged;MySocket-OnDiscard=MySocketDiscard;MySocket-OnError=MySocketError;龙源期刊网=MySocketReceive;MySocket-MaxBufSize=MAX_BUF_SIZE;MySocket-Protocol=cmTcpServer;新建函数Net_SyncButtonState(),并在Socket动作事件中触发调用,以保证网络数据处理的实时动作。void__fastcallTFormNet::MySocketActiveChanged(TObject*Sender){Net_SyncButtonState();}软件界面图为了提软件的易用性,程序在Hint提示上采用Application-Hint;这样当鼠标处在软件的哪个控件上哪个控件对应的Hint提示信息就会呈现在提示区域,这样极大的方便了用户的调试操作,使得帮助信息更具针对性。void__fastcallTFormNet::OnHint(TObject*Sender){StringstrHint;if(Application-Hint.Length()0){strHint=Application-Hint;}else{strHint=就绪!;}HintLabel-Caption=strHint;龙源期刊网();}1.2接收区设置接收区包括四个CheckBox单选控件,分别是接收转向文件...、自动换行显示、十六进制显示和暂停接收显示。此外还有两个Label控件触发保存数据和清除显示事件。在接收转向文件事件中,需要创建TSaveDialog*dlg=newTSaveDialog(this);点击会触发事件弹出文件名和保存类型对话框。执行对话框,判断接收文件属于新建、覆盖还是追加。//自动换行处理if(((TCheckBox*)Sender)-Checked){intsize=TextRecv-Text.Length();if(size0&&TextRecv-Text[size]!='\n')TextRecv-Lines-Add();}//十六进制显示处理if(CheckBox_ReceiveShowHex-Checked){;;DataLen=data_to_hex((char*)pBuf,DataLen,&SendBuf[0],MAX_BUF_SIZE);pBuf=SendBuf;}//暂停接收显示处理if(((TCheckBox*)Sender)-Checked)龙源期刊网{;TextRecv-Color=(TColor)0x8f8f8f;TextRecv-Cursor=crNo;}else{;TextRecv-Color=clWhite;TextRecv-Cursor=crDefault;}2发送接收2.1数据发送根据用户所选择的通信协议不同,程序调用不同的发送函数。if(MySocket-Protocol==cmTcpClient){SendOK=MySocket-Send(DataPtr,DataSize);}elseif(MySocket-Protocol==cmUDP){SendOK=MySocket-SendTo(IPEdit_IPAddress2-IPdata,str_to_int(Edit_PortNUM2-Text.c_str()),DataPtr,DataSize);}elseif(MySocket-Protocol==cmTcpServer){SendOK=MySocket-SendTo(MySocket-Connections-node-socket,DataPtr,DataSize);};if(recycleCount++)MyAsyncSleep(SendInterval);show_hint(正在发送数据...);龙源期刊网当用户点选循环发送数据时,程序可以选择Timer定时器控件也可以定义时间变量进行ms级定时控制,一旦发送间隔时间过久,就会对在此期间的其它动作造成影响,调用Application-ProcessMessages();语句可以实现发送间隔期间响应其它事件。voidTFormNet::MyAsyncSleep(intMSec){TDateTimeduetime=Now()+(double)MSec/MSecsPerDay;doApplication-ProcessMessages();while(transmitting&&ProgramRunning&&Now()duetime);}2.2数据接收数据接收内容放置在pBuf中,并通过Memo控件逐行添加显示,如果是Hex十六进制显示,则还需要进行转换处理。void__fastcallTFormNet::MySocketReceive(TObject*Sender,intPeerSocket,WORDPeerPort,DWORDPeerIP,char*pBuf,intDataLen){ReceivedSize+=DataLen;StaticTextRecv-Caption=String(接收:)+ReceivedSize;if(CheckBox_ReceiveShowHex-Checked){data_to_hex(pBuf,DataLen,&SendBuf[0],MAX_BUF_SIZE);pBuf=SendBuf;}TextRecv-Lines-Add(pBuf);}3结论龙源期刊网下使用Socket进行网络调试助手软件开发做个探讨,有效地实现了TCP(集成服务器和客户端)和UDP网络数据发送接收处理,实践效果良好,达到了预期的开发目的。参考文献[1]赵晨,吴锤红.Delphi高级通信调试助手软件的设计[J].2007(3):33-39[2]杨桂红,陈继文,王冬梅等.SymbianS60v5操作平台串行通信调试助手的设计与实现[J].2012,21(3):213-219[3]黎爱琼,陈家林,谈宏华.基于Linux操作系统下串口调试助手的设计[J].2006(16):88-90[4]谢瑞和.串行技术大全[M].北京:清华大学出版社,2003作者简介李玉石,工程师,主要从事计量检定、仪器仪表的研究工作。(责任编辑:张晓明)
本文标题:基于C++-Builder的网络调试助手设计与实现
链接地址:https://www.777doc.com/doc-4653182 .html