我用了IdUDPClient和IdUDPServer这两个控件做了个局域网信息发送软件,
代码如下:
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, IdUDPServer, IdBaseComponent, IdComponent, IdUDPBase,
IdUDPClient, StdCtrls,IdSocketHandle, IdAntiFreezeBase, IdAntiFreeze;type
TJ=Record
SendName:String;
Msg:String[100];
end;type
TForm1 = class(TForm)
Label1: TLabel;
Edit1: TEdit;
Label2: TLabel;
Edit2: TEdit;
Edit4: TEdit;
Label3: TLabel;
Memo1: TMemo;
Edit5: TEdit;
Button1: TButton;
UDPC: TIdUDPClient;
UDPS: TIdUDPServer;
procedure Button1Click(Sender: TObject);
procedure UDPSUDPRead(Sender: TObject; AData: TStream;
ABinding: TIdSocketHandle);
procedure FormCreate(Sender: TObject); private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject); //向远程主机发送信息
begin
Memo1.Lines.Add(Edit5.Text);
UDPC.Send(Edit5.Text);
end;procedure TForm1.UDPSUDPRead(Sender: TObject; AData: TStream;
ABinding: TIdSocketHandle);
var
TTF:String;
begin
TTF:=UDPS.ReceiveString(2000); //获取字符串信息
Memo1.Lines.Add(TTF);
end;procedure TForm1.FormCreate(Sender: TObject);
begin
UDPC.Host:=Edit1.Text; //设定远程IP
UDPC.Port:=StrToInt(Edit2.Text); //设定远程端口
UDPC.ReceiveTimeout:=2000; //设置超时时间
UDPS.DefaultPort:=StrToInt(Edit4.Text); //设置本地端口
UDPS.Active:=True; //IdUPDServer开始监听
end;end.
当我发送字符串的时候,要发送两次,也就是说要连续按下两次Button1,
IdUDPServer才能接收得到IdUDPClient发送过来的字符串.
请问是什么原因?我要怎样做,才能发送一次,用IdUDPServer.ReceiveString方法就能接收过来呢?
谢谢!
代码如下:
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, IdUDPServer, IdBaseComponent, IdComponent, IdUDPBase,
IdUDPClient, StdCtrls,IdSocketHandle, IdAntiFreezeBase, IdAntiFreeze;type
TJ=Record
SendName:String;
Msg:String[100];
end;type
TForm1 = class(TForm)
Label1: TLabel;
Edit1: TEdit;
Label2: TLabel;
Edit2: TEdit;
Edit4: TEdit;
Label3: TLabel;
Memo1: TMemo;
Edit5: TEdit;
Button1: TButton;
UDPC: TIdUDPClient;
UDPS: TIdUDPServer;
procedure Button1Click(Sender: TObject);
procedure UDPSUDPRead(Sender: TObject; AData: TStream;
ABinding: TIdSocketHandle);
procedure FormCreate(Sender: TObject); private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject); //向远程主机发送信息
begin
Memo1.Lines.Add(Edit5.Text);
UDPC.Send(Edit5.Text);
end;procedure TForm1.UDPSUDPRead(Sender: TObject; AData: TStream;
ABinding: TIdSocketHandle);
var
TTF:String;
begin
TTF:=UDPS.ReceiveString(2000); //获取字符串信息
Memo1.Lines.Add(TTF);
end;procedure TForm1.FormCreate(Sender: TObject);
begin
UDPC.Host:=Edit1.Text; //设定远程IP
UDPC.Port:=StrToInt(Edit2.Text); //设定远程端口
UDPC.ReceiveTimeout:=2000; //设置超时时间
UDPS.DefaultPort:=StrToInt(Edit4.Text); //设置本地端口
UDPS.Active:=True; //IdUPDServer开始监听
end;end.
当我发送字符串的时候,要发送两次,也就是说要连续按下两次Button1,
IdUDPServer才能接收得到IdUDPClient发送过来的字符串.
请问是什么原因?我要怎样做,才能发送一次,用IdUDPServer.ReceiveString方法就能接收过来呢?
谢谢!
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, IdUDPClient, IdBaseComponent, IdComponent, IdUDPBase,
IdUDPServer, StdCtrls,IdSocketHandle;type
TForm1 = class(TForm)
Button1: TButton;
IdUDPServer1: TIdUDPServer;
IdUDPClient1: TIdUDPClient;
Memo1: TMemo;
procedure FormCreate(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{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
begin
self.IdUDPServer1.DefaultPort:=1984;
self.IdUDPServer1.Active:= true;
end;procedure TForm1.Button1Click(Sender: TObject);
begin
self.IdUDPClient1.Send('127.0.0.1',1984,'fdsafdsa');
end;procedure TForm1.IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
ABinding: TIdSocketHandle);
var
sStream: TStringStream;
begin
sStream:= TStringStream.Create('');
try
sStream.CopyFrom(AData,AData.Size);
Memo1.Lines.Add(sStream.DataString);
finally
sStream.Free;
end;
end;end.这就是一个既能发送也能接收的indy udp demo
接收端只用:IdUDPServer;
嗯.你的代码确实能成功地接收到发送端发送过来的字符,
在此我想知道为什么IdUDPServer.ReceiveString方法接收不到呢?
还是我用这个方法用得不正确?