?? frmmain.pas
字號:
unit frmMain;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, hxUdp, Buttons, ActnList;
type
TMainForm = class(TForm)
memClient: TMemo;
memServer: TMemo;
Label1: TLabel;
Label2: TLabel;
btnSend: TButton;
btnBroadcast: TButton;
GroupBox1: TGroupBox;
chkProxy: TCheckBox;
Label3: TLabel;
edtProxyIP: TEdit;
edtProxyPort: TEdit;
Label4: TLabel;
edtProxyUser: TEdit;
Label5: TLabel;
edtProxyPass: TEdit;
Label6: TLabel;
edtSend: TEdit;
btnStart: TSpeedButton;
ActionList1: TActionList;
actStart: TAction;
actSend: TAction;
actBroadcast: TAction;
actStop: TAction;
SpeedButton1: TSpeedButton;
GroupBox2: TGroupBox;
Label7: TLabel;
edtServerIP: TEdit;
Label8: TLabel;
edtServerPort: TEdit;
Label9: TLabel;
edtReply: TEdit;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure actSendExecute(Sender: TObject);
procedure actBroadcastExecute(Sender: TObject);
procedure actStartExecute(Sender: TObject);
procedure actSendUpdate(Sender: TObject);
procedure actStartUpdate(Sender: TObject);
procedure actBroadcastUpdate(Sender: TObject);
procedure actStopExecute(Sender: TObject);
procedure actStopUpdate(Sender: TObject);
private
{ Private declarations }
FUdpServer: ThxUDPSocket;
FUdpClient: ThxUdpSocket;
{服務端事件}
procedure FUdpServerDataRead(UDPSocket: ThxUDPSocket; const PeerInfo: TPeerInfo);
procedure FUdpServerSocketError(Sender: TObject; ErrorType: TUDPErrorType;
var ErrorCode: Integer);
procedure FUdpServerTimeOut;
{客戶端事件}
procedure FUdpClientDataRead(UDPSocket: ThxUDPSocket; const PeerInfo: TPeerInfo);
procedure FUdpClientSocketError(Sender: TObject; ErrorType: TUDPErrorType;
var ErrorCode: Integer);
procedure FUdpClientTimeOut;
procedure Log(Msg: string; Client: Boolean = True);
public
{ Public declarations }
end;
var
MainForm: TMainForm;
implementation
{$R *.dfm}
procedure TMainForm.FormCreate(Sender: TObject);
begin
FUdpServer:= ThxUDPSocket.Create;
FUdpServer.OnDataRead:= FUdpServerDataRead;
FUdpServer.OnSocketError:= FUdpServerSocketError;
FUdpServer.OnTimeOut:= FUdpServerTimeOut;
FUdpServer.Port:= StrToInt(edtServerPort.Text);
FUdpServer.EnableBroadcast:= False;
FUdpClient:= ThxUDPSocket.Create;
FUdpClient.OnDataRead:= FUdpClientDataRead;
FUdpClient.OnSocketError:= FUdpClientSocketError;
FUdpClient.OnTimeOut:= FUdpClientTimeOut;
FUdpClient.EnableBroadcast:= True;
end;
procedure TMainForm.FUdpClientSocketError(Sender: TObject; ErrorType: TUDPErrorType;
var ErrorCode: Integer);
begin
end;
procedure TMainForm.FUdpClientDataRead(UDPSocket: ThxUDPSocket; const PeerInfo: TPeerInfo);
var
Buf: array[0..1023] of char;
begin
FillChar(Buf, 1024, #0);
FUdpClient.RecvBuf(Buf, 1024, edtServerIP.Text, StrToInt(edtServerPort.Text));
Log(Buf);
end;
procedure TMainForm.FUdpClientTimeOut;
begin
end;
procedure TMainForm.FUdpServerDataRead(UDPSocket: ThxUDPSocket;
const PeerInfo: TPeerInfo);
var
Buf: array[0..1023] of char;
begin
FillChar(Buf, 1024, #0);
if UDPSocket.RecvBuf(Buf, 1024, edtServerIP.Text, StrToInt(edtServerPort.Text)) then
begin
Log(Format('Come from %s [port:%d]:%s', [PeerInfo.PeerIP, PeerInfo.PeerPort, Buf]), False);
FillChar(Buf, 1024, #0);
StrPCopy(Buf, edtReply.Text);
UDPSocket.SendBuf(Buf, Length(edtReply.Text), UDPSocket.PeerInfo.PeerIP, UDPSocket.PeerInfo.PeerPort)
end
else
Log('Receive Data Error!', False);
end;
procedure TMainForm.FUdpServerSocketError(Sender: TObject; ErrorType: TUDPErrorType;
var ErrorCode: Integer);
begin
Log('Server Error');
end;
procedure TMainForm.FUdpServerTimeOut;
begin
Log('Server TimeOut');
end;
procedure TMainForm.Log(Msg: string; Client: Boolean);
begin
if Client then
memClient.Lines.Add(Msg)
else
memServer.Lines.Add(Msg);
end;
procedure TMainForm.FormDestroy(Sender: TObject);
begin
FUdpClient.Free;
FUdpServer.Free;
end;
procedure TMainForm.actSendExecute(Sender: TObject);
begin
FUdpClient.SendText(edtSend.Text, edtServerIP.Text, StrToInt(edtServerPort.Text));
end;
procedure TMainForm.actBroadcastExecute(Sender: TObject);
begin
FUdpClient.BroadcastText('Welcome to our land', StrToInt(edtServerPort.Text));
end;
procedure TMainForm.actStartExecute(Sender: TObject);
begin
//開啟服務
FUdpServer.Active:= True;
//客戶端連接
with FUdpClient.ProxyInfo do
begin
Enabled:= chkProxy.Checked;
Address:= edtProxyIP.Text;
Port:= StrToInt(edtProxyPort.Text);
Username:= edtProxyUser.Text;
Password:= edtProxyPass.Text;
end;
FUdpClient.Active:= True;
end;
procedure TMainForm.actSendUpdate(Sender: TObject);
begin
(Sender as TAction).Enabled:= FUdpClient.Active;
end;
procedure TMainForm.actStartUpdate(Sender: TObject);
begin
(Sender as TAction).Enabled:= not FUdpClient.Active;
end;
procedure TMainForm.actBroadcastUpdate(Sender: TObject);
begin
(Sender as TAction).Enabled:= FUdpClient.Active;
end;
procedure TMainForm.actStopExecute(Sender: TObject);
begin
FUdpClient.Active:= False;
end;
procedure TMainForm.actStopUpdate(Sender: TObject);
begin
(Sender as TAction).Enabled:= FUdpClient.Active;
end;
end.
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -