📄 udpdem.pas
字号:
unit UDPDem;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ComCtrls, NMUDP, ExtCtrls;
type
TForm1 = class(TForm)
NMUDP1: TNMUDP;
PageControl1: TPageControl;
TabSheet1: TTabSheet;
TabSheet2: TTabSheet;
Edit1: TEdit;
Edit2: TEdit;
Label1: TLabel;
Label2: TLabel;
Edit3: TEdit;
Label3: TLabel;
Button1: TButton;
Panel1: TPanel;
Button2: TButton;
Memo1: TMemo;
StatusBar1: TStatusBar;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure NMUDP1Status(Sender: TComponent; status: String);
procedure NMUDP1DataSend(Sender: TObject);
procedure NMUDP1InvalidHost(var handled: Boolean);
procedure NMUDP1DataReceived(Sender: TComponent; NumberBytes: Integer;
FromIP: String; Port: Integer);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
//"Send"按钮的OnClick事件的处理程序
var
MyStream: TMemoryStream;
TmpStr: String;
Begin
NMUDP1.ReportLevel := Status_Basic;//设置数据优先级
NMUDP1.RemoteHost := Edit1.Text;//设置远程主机的地址
NMUDP1.RemotePort := StrToInt(Edit2.Text);//设置接收方的端口号
TmpStr := Edit3.Text;//设置要发送的数据
MyStream := TMemoryStream.Create;//创建一个流对象
try
MyStream.Write(TmpStr[1], Length(Edit3.Text));//将要发送的数据封装到流对象中
NMUDP1.SendStream(MyStream);//发送流对象
finally
MyStream.Free;//发送完毕释放流对象
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
//"Clear Memo"按钮的OnClick事件的处理程序
begin
Memo1.Clear;//清除Memo控件中显示的接收到的数据
end;
procedure TForm1.NMUDP1Status(Sender: TComponent; status: String);
//在NMUDP控件的状态改变时触发
begin
If StatusBar1 <> nil then
//如果状态条对象存在
StatusBar1.SimpleText := status;//更新状态条中的显示
end;
procedure TForm1.NMUDP1DataSend(Sender: TObject);
//在NMUDP控件发送完数据后触发
begin
StatusBar1.SimpleText := 'Data Sent';//更新状态条中的显示
end;
procedure TForm1.NMUDP1InvalidHost(var handled: Boolean);
//在接收方地址不正确时触发
var
TmpStr: String;
begin
//弹出对话框,要求重新输入接收方主机地址
If InputQuery('Invalid Host!', 'Specify a new host:', TmpStr) then
//如果输入接收方主机地址后按"OK"按钮
Begin
NMUDP1.RemoteHost := TmpStr;//重新设定接收方主机地址
Handled := TRUE;//表明错误已被处理,系统不必再进行处理
End;
end;
procedure TForm1.NMUDP1DataReceived(Sender: TComponent;
NumberBytes: Integer; FromIP: String; Port: Integer);
//在NMUDP控件接收到数据时触发
var
MyStream: TMemoryStream;
TmpStr: String;
begin
MyStream := TMemoryStream.Create;//创建一个流对象
try
NMUDP1.ReadStream(MyStream);//把接收到的数据读到流对象中
SetLength(TmpStr,NumberBytes);//设定字符串的长度为接收到的数据的长度
MyStream.Read(TmpStr[1],NumberBytes);//把读到流对象中的数据保存到字符串中
Memo1.Lines.Add(FromIP+': '+TmpStr);//把保存在字符串中的数据添加到Memo控件中进行显示
finally
MyStream.Free;//释放流对象
end;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -