unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, IdUDPServer, IdBaseComponent, IdComponent, IdUDPBase,
IdUDPClient, StdCtrls;type
TForm1 = class(TForm)
Label1: TLabel;
Edit1: TEdit;
Button1: TButton;
Label2: TLabel;
Memo1: TMemo;
IdUDPClient1: TIdUDPClient;
IdUDPServer1: TIdUDPServer;
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.Button1Click(Sender: TObject);
begin
idudpclient1.Send(edit1.Text);
end;procedure TForm1.IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
ABinding: TIdSocketHandle);
var
tempstream:tstringstream;
begin
tempstream:=tstringstream.Create('');
tempstream.CopyFrom(adata,adata.Size);
memo1.Lines.add(tempstream.datastring);
end;end.
这个例子是照 delpi7组件经典解析 里面的,但我编译的时候 提示undeclared identifier:'tidsockethandle'望知道朋友指点
--------------------
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, IdUDPServer, IdBaseComponent, IdComponent, IdUDPBase,
IdUDPClient, StdCtrls;type
TForm1 = class(TForm)
Label1: TLabel;
Edit1: TEdit;
Button1: TButton;
Label2: TLabel;
Memo1: TMemo;
IdUDPClient1: TIdUDPClient;
IdUDPServer1: TIdUDPServer;
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.Button1Click(Sender: TObject);
begin
idudpclient1.Send(edit1.Text);
end;procedure TForm1.IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
ABinding: TIdSocketHandle);
var
tempstream:tstringstream;
begin
tempstream:=tstringstream.Create('');
tempstream.CopyFrom(adata,adata.Size);
memo1.Lines.add(tempstream.datastring);
end;end.
这个例子是照 delpi7组件经典解析 里面的,但我编译的时候 提示undeclared identifier:'tidsockethandle'望知道朋友指点
--------------------
如下:
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, IdUDPServer, IdBaseComponent, IdComponent, IdUDPBase,
IdUDPClient, StdCtrls;
变为
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, IdUDPServer, IdBaseComponent, IdComponent, IdUDPBase,
IdUDPClient, StdCtrls, IdSocketHandle;
按照你说的方法,在uses里面加了 但错误信息提示: file not found tidsockethandle.dcu望指教
或者查找tidsockethandle.dcu 的路径,把路径写上去就可以
ABinding: TIdSocketHandle);
var
tempstream:tstringstream;
begin
tempstream:=tstringstream.Create('');
tempstream.CopyFrom(adata,adata.Size);
memo1.Lines.add(tempstream.datastring);
end;
这段没有执行,请问是什么原因呢?谢
我说的是 IdSocketHandle , 而你们都说 TIdSocketHandle, 多了一个字母 T
不过最后总算是解决了对于那段没有运行的问题, 可能有以下几个原因, 你一个一个去排查吧
1. 未正确设置 Bindings, Bindings 设置你需要接收的UDP包的本机IP地址和端口号
如果你客户端发送的地址是 192.168.0.10, 端口为 9900, 则Bindings 属性必须设置为
192.168.0.10:9900
可以侦听多个IP及端口, 中间用逗号分隔, 如: 192.168.0.10:9900,202.38.75.1:9900
但这些地址都必须是本机的IP地址, 且相应端口未被占用
2. 确保调用了 IdUDPServer1.Active := True; 并且未发生异常
3. 确保你的客户端发送了正确的地址和端口, 且客户端对本地址可达
4. 确保你的IdUDPServer1.BufferSize 大于或等于你所发送的数据的大小, 对于UDP数据包, 最大用户数据长度为65535 - 28 = 65507
如果以上问题都被排除, 那应当没问题的