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'望知道朋友指点
--------------------

解决方案 »

  1.   

    在你的uses 中加入 IdSocketHandle
    如下:
    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;
      

  2.   

    to spirit_sheng:
    按照你说的方法,在uses里面加了 但错误信息提示:   file not found tidsockethandle.dcu望指教
      

  3.   

    你是用D 幾的呀,把光標放到IdSocketHandle裡,按F1幫助
      

  4.   

    查找tidsockethandle.dcu ,放在程序的目录中
    或者查找tidsockethandle.dcu 的路径,把路径写上去就可以
      

  5.   

    我加了 上面问题已经解决,但 我调试的时候 只有 client 那段运行 但那段调试完 下面的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;
    这段没有执行,请问是什么原因呢?谢
      

  6.   


    我说的是 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
     
    如果以上问题都被排除, 那应当没问题的