主体思路:先由管理机发UDP命令到客户端,客户端在获取主机IP后,再建立TCP连接,这样就不用手工去客户端设主机IP了,而且主机IP可随意变化。
管理机(TCP服务端 / UDP客户端)源码:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, ExtCtrls, StdCtrls, IdAntiFreezeBase, IdAntiFreeze,
IdUDPBase, IdUDPClient, IdBaseComponent, IdComponent, IdTCPServer, Winsock, StrUtils;
const
TCPServerPort = 9001; //管理机作TCP Server, 主控
TCPClientSPort = 9000; //考试机作TCP Client
UDPServerPort = 8000; //考试机作UDP Server
UDPClientSPort = 8001; //管理机作UDP Client, 主控, 用于把管理机IP传给考试机
type
TForm1 = class(TForm)
Panel1: TPanel;
StatusBar1: TStatusBar;
GroupBox1: TGroupBox;
ListBox1: TListBox;
btnAdd: TButton;
btnDel: TButton;
Label1: TLabel;
btnPingAll: TButton;
GroupBox2: TGroupBox;
ListBox2: TListBox;
GroupBox3: TGroupBox;
ListBox3: TListBox;
btnStart: TButton;
btnStop: TButton;
btnExport: TButton;
btnRefresh: TButton;
btnQuit: TButton;
IdTCPServer1: TIdTCPServer;
IdUDPClient1: TIdUDPClient;
IdAntiFreeze1: TIdAntiFreeze;
SaveDialog1: TSaveDialog;
btnPingOne: TButton;
procedure btnQuitClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure btnAddClick(Sender: TObject);
procedure btnDelClick(Sender: TObject);
procedure btnPingAllClick(Sender: TObject);
procedure btnStartClick(Sender: TObject);
procedure btnStopClick(Sender: TObject);
procedure btnPingOneClick(Sender: TObject);
procedure IdTCPServer1Connect(AThread: TIdPeerThread);
private
{ Private declarations }
function LocalIP():string;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
//关闭本程序
procedure TForm1.btnQuitClick(Sender: TObject);
begin
close;
end;
//初始化参数
procedure TForm1.FormCreate(Sender: TObject);
begin
//界面内容
StatusBar1.Panels[0].Text :&#