delphi2007 中的idudpserver控件的监听事件和以前的不一样了。
不知道怎么读取数据。不知道这是delphi2007的bug还是故意这样子的。
下面是两个对照代码。
procedure TForm1.IdUDPServer1UDPRead(Sender: TObject; AData: TBytes;
  ABinding: TIdSocketHandle);
注意红色部分的类型。
不是stream了procedure TForm2.IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
  ABinding: TIdSocketHandle);不得不承认我比较菜。
请高手帮忙。只要能正确收取数据就行了。
字符串数据。必须使用delphi2007。procedure TForm1.IdUDPServer1UDPRead(Sender: TObject; AData: TBytes;
  ABinding: TIdSocketHandle);//修改类型后编辑器能通过,但是程序没有效果。

解决方案 »

  1.   

    procedure TForm2.IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
      ABinding: TIdSocketHandle);procedure TForm1.IdUDPServer1UDPRead(Sender: TObject; AData: TBytes;
      ABinding: TIdSocketHandle);//修改类型后编辑器能通过,但是程序没有效果。
    或是给一份delphi2007下能正常使用的udpserver聊天室源码 就是只有客户端没有服务端的那种。谢谢非常急 也非常郁闷。
      

  2.   

    这是因为delphi2007的indy版本是10的原因,在新的Indy10控件中,与Indy9发生了很大的变化。下面就UdpServer的接收方法以例程的方法简单的说明一下;
     
    Indy9:
    UDPServer(Sender:TObject;AData:Thread;Abinding:tidsocketHandle);
     
    indy10:
    UDPRead(Sender: TObject; AData: TBytes;ABinding: TIdSocketHandle);
     
    在读取数据的时候,返回的数据类型发生了变化。本人在网上查找到了很多的资料。都没得详细的解决办法。只是接收String的数据有一些方法提供。今天我发送了一条记录形式的数据接收成功;特此记下以便日后以供参考;
     
    注意:可以在两个工程中分别放值一个tidudpserver控件,亦或在一个工程中放置两个tidudpserver控件亦可。
     
    example:
     
    Type
      TComm = Record
         msgType: integer;
         Context: String[254];
      end;
      pComm = ^TComm;
     
      TAForm = Class(Tform)
      ...
     
    implementation
     
    //发送
    procedure TAform.btnSendClick(Sender:TObject);
    Var
      Comm: PComm;
      Buf: TBytes;
    begin
      New(Comm);
      Comm^.MsgType := 1;
      Comm^.context := '中国人民共和国';
      Buf := @Comm;
      CopyMemory(@Buf,@Comm,SizeOf(Comm));
      udpserver.SendBuffer('127.0.0.1',7001,Buf);
      Dispose(Comm);
    end;
     
    //接收
     Procedure TAForm.ServerUDPRead(Sender: TObject; AData: TBytes;
      ABinding: TIdSocketHandle);
    Var
      comm: PComm;
    begin
      New(Comm);
      CopyMemory(@comm,@AData,SizeOf(AData));
      mmo1.Lines.Add(Comm^.context);
      Dispose(comm);
    end;
     
    end.
      

  3.   

    还有问题哦。
    你这代码我怎么编辑通不过呢!
    给份这个的全部的完整UNIT好吗 谢谢!
      

  4.   

    BytesToRaw
    RawToBytes
    用这个来转换,,没必要那么麻烦。