?? unit1.pas
字號(hào):
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Mask, ExtCtrls,Menus,TeeProcs, TeEngine, Chart, ToolWin, ActnMan, ActnCtrls, ComCtrls, jpeg,
bsSkinData, BusinessSkinForm, bsSkinCtrls, bsSkinBoxCtrls, bsMessages,
Series;
Const
WM_Test=WM_User+100; //消息號(hào)
type
Tmain = class(TForm)
bsStoredSkin1: TbsStoredSkin;
bsSkinData1: TbsSkinData;
bsBusinessSkinForm1: TbsBusinessSkinForm;
bsSkinMainMenu1: TbsSkinMainMenu;
kk1: TMenuItem;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
N5: TMenuItem;
N7: TMenuItem;
N8: TMenuItem;
N9: TMenuItem;
bsSkinMainMenuBar1: TbsSkinMainMenuBar;
N10: TMenuItem;
bsSkinMessage1: TbsSkinMessage;
bsStoredSkin2: TbsStoredSkin;
bsSkinData2: TbsSkinData;
Timer2: TTimer;
bsSkinListBox1: TbsSkinListBox;
bsSkinPanel1: TbsSkinPanel;
bsSkinMemo1: TbsSkinMemo;
Timer1: TTimer;
procedure N1Click(Sender: TObject);
procedure N4Click(Sender: TObject);
procedure N10Click(Sender: TObject);
procedure N2Click(Sender: TObject);
procedure N3Click(Sender: TObject);
procedure Timer2Timer(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure N8Click(Sender: TObject);
procedure N9Click(Sender: TObject);
private
{ Private declarations }
public
procedure WMtest(var Message: TMessage); message WM_test;
end;
var
main: Tmain;
message_count1:integer;
num1:integer;
num2:integer;
implementation
uses unit3,unit7;
function StartRun():boolean;Cdecl;external 'host.dll';
function StartSendandRecv(senderIp:pchar;recverIp:pchar;pktLen:integer;sleepTime:integer):boolean;Cdecl;external 'host.dll';
//function ReRecverInfo():boolean;Cdecl;external 'host.dll';
function ReSenderInfo(senderIp:pchar):boolean;Cdecl;external 'host.dll';
function StopSend(senderIp:pchar):boolean;Cdecl;external 'host.dll';
function StopRecv():boolean;Cdecl;external 'host.dll';
procedure GiveWndHandle(hwnd1:HWND;hwnd2:HWND);Cdecl;external 'host.dll';
{$R *.dfm}
//菜單--設(shè)置
procedure Tmain.N1Click(Sender: TObject);
begin
para_set.Show;
end;
//菜單--退出
procedure Tmain.N4Click(Sender: TObject);
begin
application.Terminate;
end;
//菜單--結(jié)果統(tǒng)計(jì)
procedure Tmain.N10Click(Sender: TObject);
begin
total.Show;
end;
//菜單--開(kāi)始發(fā)送
procedure Tmain.N2Click(Sender: TObject);
var input:textfile;
str:string;
i:integer;
total_interval:integer;
begin
//將參數(shù)從mysettings.ini載入main.bsSkinListBox1
//如果文件存在則讀取數(shù)據(jù)
if fileexists('mysettings.ini') then
begin
assignfile(input,'mysettings.ini');
reset(input);
//將發(fā)送數(shù)據(jù)包大小、接收端主機(jī)地址、接收端主機(jī)端口、發(fā)送速率、統(tǒng)計(jì)速率、發(fā)送端主機(jī)地址依次載入main.bsSkinListBox1
self.bsSkinListBox1.Items.Clear;
readln(input,str);
while (str<>'END') do
begin
self.bsSkinListBox1.Items.Add(str);
readln(input,str);
end;
closefile(input);
end
else
self.bsSkinMessage1.MessageDlg('文件不存在!',mtcustom,[mbyes],0);
//total接收統(tǒng)計(jì)數(shù)據(jù)的消息,main接收控制消息
GiveWndHandle(total.Handle,self.Handle);
if StartRun() then
begin
self.bsSkinMemo1.Lines.Add('控制端初始化成功!');
end;
for i:=5 to self.bsSkinListBox1.Items.Count-1 do
StartSendandRecv(pchar(self.bsSkinListBox1.Items.Strings[i]),pchar(self.bsSkinListBox1.Items.Strings[1]),strtoint(self.bsSkinListBox1.Items.Strings[0]),strtoint(self.bsSkinListBox1.Items.Strings[3]));
self.bsSkinMemo1.Lines.Add('發(fā)送端已經(jīng)開(kāi)始發(fā)送!');
self.bsSkinMemo1.Lines.Add('接收端已經(jīng)開(kāi)始接收!');
//只有開(kāi)始發(fā)送之后才能點(diǎn)擊統(tǒng)計(jì)結(jié)果按鈕和停止發(fā)送按鈕
self.N3.Enabled:=true;
self.N10.Enabled:=true;
total.Show;
total.initialize(sender);
//原來(lái)的開(kāi)始統(tǒng)計(jì)按鈕所做的事情
total_interval:=strtoint(self.bsSkinListBox1.Items.Strings[4]);
total.bsSkinStdLabel26.Caption:='橫坐標(biāo)單位:'+inttostr(total_interval)+'毫秒 ';
total.bsSkinStdLabel27.Caption:=total.bsSkinStdLabel26.Caption;
total.Timer1.Interval:=total_interval;
total.Timer1.Enabled:=true;
total.Chart1.BottomAxis.SetMinMax(0,25);
total.Chart2.BottomAxis.SetMinMax(0,25);
self.bsSkinMemo1.Lines.Add('請(qǐng)?jiān)诓藛沃羞x擇結(jié)果統(tǒng)計(jì),查看流量的統(tǒng)計(jì)結(jié)果!');
//開(kāi)始發(fā)送之后本按鈕就不能點(diǎn)擊,同時(shí)也不能點(diǎn)擊設(shè)置按鈕
self.N1.Enabled:=false;
self.N2.Enabled:=false;
end;
//菜單--停止發(fā)送
procedure Tmain.N3Click(Sender: TObject);
var i:integer;
begin
total.Timer1.Enabled:=false;
total.Chart1.BottomAxis.SetMinMax(0,25);
total.Chart2.BottomAxis.SetMinMax(0,25);
total.initialize(sender);
//發(fā)送端停止發(fā)送
for i:=5 to self.bsSkinListBox1.Items.Count-1 do
begin
StopSend(pchar(self.bsSkinListBox1.Items.Strings[i]));
end;
self.bsSkinMemo1.Lines.Add('發(fā)送端正在停止發(fā)送!');
self.bsSkinMemo1.Lines.Add('接收端正在停止接收!');
//用來(lái)記錄停止發(fā)送端時(shí)返回的消息的個(gè)數(shù)
message_count1:=0;
//控制接收端停止接收的timer,num用來(lái)計(jì)數(shù),超時(shí)顯示異常發(fā)生
self.Timer2.Enabled:=true;
num1:=0;
//控制發(fā)送端停止發(fā)送的timer
self.Timer1.Enabled:=true;
num2:=0;
end;
//收到消息后觸發(fā)的事件
procedure Tmain.WMtest(var Message: TMessage);
var str:string;
i:integer;
begin
//傳過(guò)來(lái)的是一個(gè)字符串的頭指針
str:=pchar(Message.WParam);
i:=self.bsSkinListBox1.Items.Count-5;
//當(dāng)收到發(fā)送端發(fā)的消息的時(shí)候,應(yīng)該做的事情
if str='sender stopped!' then
begin
message_count1:=message_count1+1;
//如果所有的發(fā)送端都停止
if message_count1 >= i then
begin
self.Timer1.Enabled:=false;
self.bsSkinMemo1.Lines.Add('所有的發(fā)送端都已經(jīng)停止發(fā)送!');
end
else
self.bsSkinMemo1.Lines.Add('還有'+inttostr(i-message_count1)+'個(gè)發(fā)送端尚未停止!');
end
else if str='recver stopped!' then
begin
self.Timer2.Enabled:=false;
self.bsSkinMemo1.Lines.Add('接收端已經(jīng)停止接收!');
total.Hide;
self.N3.Enabled:=false;
self.N10.Enabled:=false;
self.N1.Enabled:=true;
end
else
begin
self.bsSkinMemo1.Lines.Add(str+'已經(jīng)開(kāi)始發(fā)送!')
end;
end;
//timer2用來(lái)使接收端停止接收
procedure Tmain.Timer2Timer(Sender: TObject);
begin
num1:=num1+1;
StopRecv();
if num1>100 then
begin
self.bsSkinMemo1.Lines.Add('停止接收端時(shí)發(fā)生錯(cuò)誤,超時(shí)退出!');
total.Hide;
self.N3.Enabled:=false;
self.N10.Enabled:=false;
self.N1.Enabled:=true;
self.Timer2.Enabled:=false;
end;
end;
//窗體大小初始化
procedure Tmain.FormCreate(Sender: TObject);
begin
self.bsBusinessSkinForm1.WindowState:= wsMaximized;
self.bsSkinPanel1.Width:=1024;
self.bsSkinPanel1.Height:=738;
self.bsSkinMemo1.Width:=1000;
self.bsSkinMemo1.Height:=670;
end;
//timer1用來(lái)控制使所有的發(fā)送端停止發(fā)送
procedure Tmain.Timer1Timer(Sender: TObject);
var i:integer;
begin
num2:=num2+1;
if (num2<=200) and (message_count1<self.bsSkinListBox1.Items.Count) then
for i:=5 to self.bsSkinListBox1.Items.Count-1 do
StopSend(pchar(self.bsSkinListBox1.Items.Strings[i]));
if (num2>200) and (message_count1<self.bsSkinListBox1.Items.Count) then
begin
self.bsSkinMemo1.Lines.Add('停止發(fā)送端時(shí)發(fā)生錯(cuò)誤,超時(shí)退出!');
self.Timer1.Enabled:=false;
end;
end;
procedure Tmain.N8Click(Sender: TObject);
begin
self.bsSkinMessage1.MessageDlg('分布式網(wǎng)絡(luò)流量生成及測(cè)量工具主控端 v2.0',mtcustom,[mbyes],0);
end;
procedure Tmain.N9Click(Sender: TObject);
begin
self.bsSkinMessage1.MessageDlg('項(xiàng)目策劃:劉軼導(dǎo)師 程序設(shè)計(jì):崔華力,田敏 技術(shù)支持信箱:huali_chl@163.com',mtcustom,[mbyes],0);
end;
end.
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -