HanDs
管理员

[Delphi文章] 使用IdUDP控件进行通信 





学习中请遵循国家相关法律法规,黑客不作恶。没有网络安全就没有国家安全

本站需要登陆后才能查看

使用IdUDP控件进行通信(delphi)
所以使用Id控件进行UDP通信的基本操作是:
初始化:Remote的IP,Port,(延时),本地IP(DefaultIP),端口,还要激活
接受,Receive事件为IdUDPServerUDPRead事件中加入处理代码
发送消息:调用SendBuffer(Comm,Sizeof(comm))方法,把消息放入需要发送的内存即可,至于真正的发送交给控件自己去完成

以下是代码的简单实例:

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, ExtCtrls, IdUDPServer, IdBaseComponent,
IdComponent, IdUDPBase, IdUDPClient,
IdSocketHandle;//这个IdSocketHandle需要手动自己加入

type
TCommBlock = record
SenderName,
Msg :string[100];
end;
TForm1 = class(TForm)
Panel1: TPanel;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
EdtRemote: TEdit;
EdtName: TEdit;
EdtRPort: TEdit;
EdtPort: TEdit;
Memo1: TMemo;
BitSet: TBitBtn;
Panel2: TPanel;
EdtMsg: TEdit;
Button1: TButton;
IdUDPClient1: TIdUDPClient;
IdUDPServer1: TIdUDPServer;
procedure BitSetClick(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
ABinding: TIdSocketHandle);
private
{ Private declarations }


public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

const RECIEVETIMEOUT=5000; //定义延时,单位为毫秒
{$R *.dfm}

procedure TForm1.BitSetClick(Sender: TObject);//初始化
begin
IdUDPClient1.Host:= EdtRemote.Text;//远程IP地址
IdUDPClient1.Port:=StrToInt(EdtRPort.Text);//远程端口
IdUDPClient1.ReceiveTimeout:=RECIEVETIMEOUT;//延时

//下面是设置本地端口号
IdUDPServer1.DefaultPort:=StrToInt(EdtPort.Text);//本地IP
IdUDPServer1.Active:=true;//激活IdUDPServer 控件
Button1.Enabled:=True;
end;

procedure TForm1.Button1Click(Sender: TObject);//发送消息
var
//define the struct of communication
Comm : TCommBlock;//comm是一个record的实例
//type
// TCommBlock = record
// SenderName,
// Msg :string[100];
// end;
/////////////////////即使说SenderName和Msg都是100个字节长
begin
Comm.SenderName:=EdtName.text;
Comm.Msg:=EdtMsg.Text;
Memo1.Lines.Add(Comm.SenderName+'说:'+Comm.Msg);
//////////////////////////////////////发送消息
IdUDPClient1.SendBuffer(comm,Sizeof(Comm));
///////////////////////////////////发送消息
end;

procedure TForm1.IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
ABinding: TIdSocketHandle);////////////////////接到消息后的处理
var
Comm:TCommBlock;
begin
AData.ReadBuffer(Comm,AData.Size);//从AData中读取数据,放入到Comm结构中去
Memo1.Lines.Add(Comm.SenderName+' Say: '+Comm.Msg);//通过Comm结构分割数据,并显示

end;

end.


所以使用Id控件进行UDP通信的基本操作是:
初始化:Remote的IP,Port,(延时),本地IP(DefaultIP),端口,还要激活
接受,Receive事件为IdUDPServerUDPRead事件中加入处理代码
发送消息:调用SendBuffer(Comm,Sizeof(comm))方法,把消息放入需要发送的内存即可,至于真正的发送交给控件自己去完成  


学习中请遵守法律法规,本网站内容均来自于互联网,本网站不负担法律责任
使用
#1楼
发帖时间:2016-7-9   |   查看数:0   |   回复数:0
游客组
快速回复