999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于C++ Builder的網(wǎng)絡(luò)調(diào)試助手設(shè)計(jì)與實(shí)現(xiàn)

2015-04-29 00:00:00李玉石
品牌與標(biāo)準(zhǔn)化 2015年5期

【摘 要】 工程應(yīng)用中為了方便儀器設(shè)備的調(diào)試和參數(shù)設(shè)置,應(yīng)用C++ Builder開(kāi)發(fā)平臺(tái),設(shè)計(jì)并實(shí)現(xiàn)了網(wǎng)絡(luò)調(diào)試助手軟件。程序除了支持TCP、UDP協(xié)議(集成服務(wù)器和客戶端),還具備間隔發(fā)送,文件導(dǎo)入導(dǎo)出等諸多功能,提高了網(wǎng)絡(luò)通信設(shè)備的調(diào)試效率。

【關(guān)鍵詞】 C++ Builder 調(diào)試助手 TCP UDP

【DOI編碼】 10.3969/j.issn.1674-4977.2015.05.018

在工業(yè)設(shè)備開(kāi)發(fā)調(diào)試中,特別是基于網(wǎng)絡(luò)設(shè)備的數(shù)據(jù)采集和遠(yuǎn)程控制過(guò)程中,網(wǎng)絡(luò)調(diào)試工具軟件類(lèi)似串口調(diào)試助手一樣,作為一種靈活方便的通訊方式被廣泛的應(yīng)用。由于涉及到TCP及UDP的Socket編程,網(wǎng)絡(luò)調(diào)試程序的開(kāi)發(fā)與串口調(diào)試程序比較更加的復(fù)雜。

1 參數(shù)設(shè)置

1.1 新建Socket

網(wǎng)絡(luò)調(diào)試助手由網(wǎng)絡(luò)設(shè)置、接收區(qū)設(shè)置、發(fā)送區(qū)設(shè)置和數(shù)據(jù)接收和發(fā)送區(qū)幾個(gè)部分構(gòu)成。網(wǎng)絡(luò)設(shè)置包括協(xié)議類(lèi)型,本地IP地址及本地端口號(hào)幾個(gè)部分。程序首先需要新建一個(gè)Socket,進(jìn)行添加。

MySocket=new TcmSocket(this);MySocket有多個(gè)相關(guān)事件,包括:數(shù)據(jù)接收、上線連接、下線斷開(kāi)、出現(xiàn)錯(cuò)誤、發(fā)送接收緩存區(qū)大小等參數(shù)[1]。

//網(wǎng)絡(luò)設(shè)置設(shè)置

MySocket=new TcmSocket(this);

MySocket-gt;OnAccept=MySocketAccept;

MySocket-gt;OnActiveChanged=MySocketActive Changed;

MySocket-gt;OnDiscard=MySocketDiscard;

MySocket-gt;OnError=MySocketError;

MySocket-gt;OnReceive=MySocketReceive;

MySocket-gt;MaxBufSize=MAX_BUF_SIZE;

MySocket-gt;Protocol=cmTcpServer;

新建函數(shù)Net_SyncButtonState(),并在Socket動(dòng)作事件中觸發(fā)調(diào)用,以保證網(wǎng)絡(luò)數(shù)據(jù)處理的實(shí)時(shí)動(dòng)作。

void__fastcall TFormNet::MySocketActiveChanged(TObject *Sender)

{

Net_SyncButtonState();

}

軟件界面圖

為了提軟件的易用性,程序在Hint提示上采用Application-gt;Hint;這樣當(dāng)鼠標(biāo)處在軟件的哪個(gè)控件上哪個(gè)控件對(duì)應(yīng)的Hint提示信息就會(huì)呈現(xiàn)在提示區(qū)域,這樣極大的方便了用戶的調(diào)試操作,使得幫助信息更具針對(duì)性。

void __fastcall TFormNet::OnHint(TObject *Sender)

{

String strHint;

if(Application-gt;Hint.Length()gt;0)

{

strHint=Application-gt;Hint;

}else

{

strHint=\"就緒!\";

}

HintLabel-gt;Caption=strHint;

HintLabel-gt;Update();

}

1.2 接收區(qū)設(shè)置

接收區(qū)包括四個(gè)CheckBox單選控件,分別是

接收轉(zhuǎn)向文件...、自動(dòng)換行顯示、十六進(jìn)制顯示和暫停接收顯示。此外還有兩個(gè)Label控件觸發(fā)保存數(shù)據(jù)和清除顯示事件。在接收轉(zhuǎn)向文件事件中,需要?jiǎng)?chuàng)建TSaveDialog *dlg=new TSaveDialog(this);點(diǎn)擊會(huì)觸發(fā)事件彈出文件名和保存類(lèi)型對(duì)話框。執(zhí)行對(duì)話框,判斷接收文件屬于新建、覆蓋還是追加。

//自動(dòng)換行處理

if( ((TCheckBox *)Sender)-gt;Checked)

{

int size=TextRecv-gt;Text.Length();

if (sizegt;0 amp;amp; TextRecv-gt;Text[size]!='\n')

TextRecv-gt;Lines-gt;Add(\"\");

}

//十六進(jìn)制顯示處理

if(CheckBox_ReceiveShowHex-gt;Checked)

{ " "DataLen=data_to_hex((char*)pBuf,DataLen,

amp;SendBuf[0],MAX_BUF_SIZE);

pBuf=SendBuf;

}

//暫停接收顯示處理

if( ((TCheckBox *)Sender)-gt;Checked )

{ " TextRecv-gt;Color=(TColor)0x8f8f8f;

TextRecv-gt;Cursor=crNo;

}else

{ " TextRecv-gt;Color=clWhite;

TextRecv-gt;Cursor=crDefault;

}

2 發(fā)送接收

2.1 數(shù)據(jù)發(fā)送

根據(jù)用戶所選擇的通信協(xié)議不同,程序調(diào)用不同的發(fā)送函數(shù)。

if(MySocket-gt;Protocol==cmTcpClient)

{

SendOK=MySocket-gt;Send(DataPtr,DataSize);

}else if(MySocket-gt;Protocol==cmUDP)

{

SendOK=MySocket-gt;SendTo(IPEdit_IPAddress2-gt;IPdata,str_to_int(Edit_PortNUM2-gt;Text.c_str()),DataPtr,DataSize);

}else if (MySocket-gt;Protocol==cmTcpServer)

{

SendOK=MySocket-gt;SendTo(MySocket-gt;Connections-gt;node-gt;socket,DataPtr,DataSize);

} "if(recycleCount++)MyAsyncSleep(SendInterval);

show_hint(\"正在發(fā)送數(shù)據(jù)...\");

當(dāng)用戶點(diǎn)選循環(huán)發(fā)送數(shù)據(jù)時(shí),程序可以選擇Timer定時(shí)器控件也可以定義時(shí)間變量進(jìn)行ms級(jí)定時(shí)控制,一旦發(fā)送間隔時(shí)間過(guò)久,就會(huì)對(duì)在此期間的其它動(dòng)作造成影響,調(diào)用Application-gt;ProcessMessages();語(yǔ)句可以實(shí)現(xiàn)發(fā)送間隔期間響應(yīng)其它事件。

void TFormNet::MyAsyncSleep(int MSec)

{ TDateTime duetime=Now() + (double)MSec / MSecsPerDay;

do Application-gt;ProcessMessages();

while(transmitting amp;amp; ProgramRunning amp;amp; Now()lt;duetime);

}

2.2 數(shù)據(jù)接收

數(shù)據(jù)接收內(nèi)容放置在pBuf中,并通過(guò)Memo控件逐行添加顯示,如果是Hex十六進(jìn)制顯示,則還需要進(jìn)行轉(zhuǎn)換處理。

void __fastcall TFormNet::MySocketReceive(TObject *Sender, int PeerSocket,WORD PeerPort, DWORD PeerIP, char *pBuf, int DataLen)

{

ReceivedSize+=DataLen;

StaticTextRecv-gt;Caption=String(\"接收 : \")+ReceivedSize;

if(CheckBox_ReceiveShowHex-gt;Checked)

{

data_to_hex(pBuf,DataLen,amp;SendBuf[0],MAX_BUF_SIZE);

pBuf=SendBuf;

}

TextRecv-gt;Lines-gt;Add(pBuf);

}

3 結(jié)論

本文對(duì)在C++ Builder下使用Socket進(jìn)行網(wǎng)絡(luò)調(diào)試助手軟件開(kāi)發(fā)做個(gè)探討,有效地實(shí)現(xiàn)了TCP(集成服務(wù)器和客戶端)和UDP網(wǎng)絡(luò)數(shù)據(jù)發(fā)送接收處理,實(shí)踐效果良好,達(dá)到了預(yù)期的開(kāi)發(fā)目的。

參考文獻(xiàn)

[1]趙晨,吳錘紅.Delphi高級(jí)通信調(diào)試助手軟件的設(shè)計(jì)[J].2007(3):33-39

[2]楊桂紅,陳繼文,王冬梅等.Symbian S60 v5 操作平臺(tái)串行通信調(diào)試助手的設(shè)計(jì)與實(shí)現(xiàn)[J].2012,21(3):213-219

[3]黎愛(ài)瓊,陳家林,談宏華.基于Linux操作系統(tǒng)下串口調(diào)試助手的設(shè)計(jì)[J].2006(16):88-90

[4]謝瑞和.串行技術(shù)大全[M].北京:清華大學(xué)出版社,2003

作者簡(jiǎn)介

李玉石,工程師,主要從事計(jì)量檢定、儀器儀表的研究工作。

(責(zé)任編輯:張曉明)

主站蜘蛛池模板: 91精品啪在线观看国产60岁 | 97免费在线观看视频| 人人91人人澡人人妻人人爽| 在线五月婷婷| 亚洲精品视频免费观看| 无码福利日韩神码福利片| 国产精品人成在线播放| 国产高清在线丝袜精品一区| 啪啪免费视频一区二区| 99re在线免费视频| 国产一区二区色淫影院| 精品夜恋影院亚洲欧洲| 91在线一9|永久视频在线| 国产无码在线调教| www成人国产在线观看网站| 午夜啪啪福利| 久久精品无码中文字幕| 亚洲AⅤ波多系列中文字幕| 亚洲视频色图| 亚洲日韩精品伊甸| 亚洲第一国产综合| 无码一区二区三区视频在线播放| 一区二区午夜| 国内精品伊人久久久久7777人| 在线无码九区| 青青青国产精品国产精品美女| 亚洲综合色婷婷中文字幕| 久久国产香蕉| av在线无码浏览| 首页亚洲国产丝袜长腿综合| 国产成人亚洲精品色欲AV | 亚洲一区二区三区香蕉| 国产欧美高清| 99re视频在线| 亚洲精品日产精品乱码不卡| 国产SUV精品一区二区6| 久久网欧美| 99re热精品视频国产免费| 久久黄色毛片| 亚洲91精品视频| 亚洲精品你懂的| 伊人久久大香线蕉综合影视| 欧美一区精品| 日韩精品一区二区三区swag| 亚洲资源站av无码网址| 日韩精品成人在线| 国产白浆在线观看| 久久人搡人人玩人妻精品| 青青青国产视频| 国产欧美性爱网| 欧洲一区二区三区无码| 亚洲天堂啪啪| 欧美日韩一区二区三区四区在线观看| 欧美午夜网| 亚洲AV无码一区二区三区牲色| 直接黄91麻豆网站| 五月婷婷综合在线视频| 成人夜夜嗨| 精品一区二区三区无码视频无码| 狼友av永久网站免费观看| 中文字幕在线播放不卡| 久草中文网| 成人av专区精品无码国产| 97久久精品人人| 丁香婷婷久久| 亚洲 欧美 日韩综合一区| 热99精品视频| 亚洲视屏在线观看| 一本视频精品中文字幕| 亚洲高清中文字幕| 久久久久青草线综合超碰| 国产99精品视频| 91精品久久久无码中文字幕vr| 一本视频精品中文字幕| 5388国产亚洲欧美在线观看| 亚洲精品无码不卡在线播放| 国产成人亚洲无吗淙合青草| 国产成人AV男人的天堂| 激情影院内射美女| 成人字幕网视频在线观看| 国产精品无码制服丝袜| 国产日韩丝袜一二三区|