📄 unit1.pas
字号:
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; //消息号
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}
//菜单--设置
procedure Tmain.N1Click(Sender: TObject);
begin
para_set.Show;
end;
//菜单--退出
procedure Tmain.N4Click(Sender: TObject);
begin
application.Terminate;
end;
//菜单--结果统计
procedure Tmain.N10Click(Sender: TObject);
begin
total.Show;
end;
//菜单--开始发送
procedure Tmain.N2Click(Sender: TObject);
var input:textfile;
str:string;
i:integer;
total_interval:integer;
begin
//将参数从mysettings.ini载入main.bsSkinListBox1
//如果文件存在则读取数据
if fileexists('mysettings.ini') then
begin
assignfile(input,'mysettings.ini');
reset(input);
//将发送数据包大小、接收端主机地址、接收端主机端口、发送速率、统计速率、发送端主机地址依次载入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接收统计数据的消息,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('发送端已经开始发送!');
self.bsSkinMemo1.Lines.Add('接收端已经开始接收!');
//只有开始发送之后才能点击统计结果按钮和停止发送按钮
self.N3.Enabled:=true;
self.N10.Enabled:=true;
total.Show;
total.initialize(sender);
//原来的开始统计按钮所做的事情
total_interval:=strtoint(self.bsSkinListBox1.Items.Strings[4]);
total.bsSkinStdLabel26.Caption:='横坐标单位:'+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('请在菜单中选择结果统计,查看流量的统计结果!');
//开始发送之后本按钮就不能点击,同时也不能点击设置按钮
self.N1.Enabled:=false;
self.N2.Enabled:=false;
end;
//菜单--停止发送
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);
//发送端停止发送
for i:=5 to self.bsSkinListBox1.Items.Count-1 do
begin
StopSend(pchar(self.bsSkinListBox1.Items.Strings[i]));
end;
self.bsSkinMemo1.Lines.Add('发送端正在停止发送!');
self.bsSkinMemo1.Lines.Add('接收端正在停止接收!');
//用来记录停止发送端时返回的消息的个数
message_count1:=0;
//控制接收端停止接收的timer,num用来计数,超时显示异常发生
self.Timer2.Enabled:=true;
num1:=0;
//控制发送端停止发送的timer
self.Timer1.Enabled:=true;
num2:=0;
end;
//收到消息后触发的事件
procedure Tmain.WMtest(var Message: TMessage);
var str:string;
i:integer;
begin
//传过来的是一个字符串的头指针
str:=pchar(Message.WParam);
i:=self.bsSkinListBox1.Items.Count-5;
//当收到发送端发的消息的时候,应该做的事情
if str='sender stopped!' then
begin
message_count1:=message_count1+1;
//如果所有的发送端都停止
if message_count1 >= i then
begin
self.Timer1.Enabled:=false;
self.bsSkinMemo1.Lines.Add('所有的发送端都已经停止发送!');
end
else
self.bsSkinMemo1.Lines.Add('还有'+inttostr(i-message_count1)+'个发送端尚未停止!');
end
else if str='recver stopped!' then
begin
self.Timer2.Enabled:=false;
self.bsSkinMemo1.Lines.Add('接收端已经停止接收!');
total.Hide;
self.N3.Enabled:=false;
self.N10.Enabled:=false;
self.N1.Enabled:=true;
end
else
begin
self.bsSkinMemo1.Lines.Add(str+'已经开始发送!')
end;
end;
//timer2用来使接收端停止接收
procedure Tmain.Timer2Timer(Sender: TObject);
begin
num1:=num1+1;
StopRecv();
if num1>100 then
begin
self.bsSkinMemo1.Lines.Add('停止接收端时发生错误,超时退出!');
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用来控制使所有的发送端停止发送
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('停止发送端时发生错误,超时退出!');
self.Timer1.Enabled:=false;
end;
end;
procedure Tmain.N8Click(Sender: TObject);
begin
self.bsSkinMessage1.MessageDlg('分布式网络流量生成及测量工具主控端 v2.0',mtcustom,[mbyes],0);
end;
procedure Tmain.N9Click(Sender: TObject);
begin
self.bsSkinMessage1.MessageDlg('项目策划:刘轶导师 程序设计:崔华力,田敏 技术支持信箱:huali_chl@163.com',mtcustom,[mbyes],0);
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -