procedure TForm1.IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
  ABinding: TIdSocketHandle);
var
  Str,Names:string;
  Stream:TStringStream;
begin
  Stream := TStringStream.Create('');
  Stream.CopyFrom(AData,AData.Size);
  Str:=Stream.DataString;
  ABinding.SendTo(ABinding.PeerIP,ABinding.PeerPort,Str[1],Length(Str));//这句话不对,不晓得如保调
end;
在delphi2009中TIdSocketHandle.sendto定义如下
procedure SendTo(
    const AIP: string, 
    const APort: Integer, 
    const ABuffer: TIdBytes, 
    const AIPVersion: TIdIPVersion = ID_DEFAULT_IP_VERSION
);
Parameters
Parameters Description 
AIP            IP address to used for the remote endpoint. 
APort          Port number to use for the remote endpoint. 
ABuffer        Values to be send using the socket handle. 
AIPVersion     IP address family for the datagram transmission. Default value is ID_DEFAULT_IP_VERSION. 

解决方案 »

  1.   

    ABUFFer参数(第三个参数)该填个什么呀
      

  2.   

    TIdBytesfunction StrToIdBytes(Value: AnsiString): TIdBytes;overload;
    begin
      Result := Nil;
      if Length(Value) = 0 then Exit;
      SetLength(Result,Length(Value)* sizeof(Value[1]));
      move(PByte(Value)^, Result[0], Length(Value)* sizeof(Value[1]));
    end;
    function StrToIdBytes(Value: String): TIdBytes;overload;
    begin
      Result := Nil;
      if Length(Value) = 0 then Exit;
      SetLength(Result,Length(Value)* sizeof(Value[1]));
      move(PByte(Value)^, Result[0], Length(Value)* sizeof(Value[1]));
    end;
      

  3.   

    First chance exception at $7C812A7B. Exception class EIdSocketError with message 'Socket Error # 10048
    Address already in use.'. Process Client.exe (2616)改了之后不晓得哪又出错了
    function TForm1.StrToIdBytes(AValue: String):Tidbytes; 
    begin
      Result := Nil;
      if Length(AValue) = 0 then Exit;
      SetLength(Result,Length(AValue)* sizeof(AValue[1]));
      move(PByte(AValue)^, Result[0], Length(AValue)* sizeof(AValue[1]));
    end;procedure TForm1.IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
      ABinding: TIdSocketHandle);
    var
      Str,Names:string;
      Stream:TStringStream;begin
      Stream := TStringStream.Create('');
      Stream.CopyFrom(AData,AData.Size);
      Str:=Stream.DataString;
      ABinding.SendTo(ABinding.PeerIP,ABinding.PeerPort,StrToIdBytes(Str[1]),ID_DEFAULT_IP_VERSION{Length(Str)});
      if GetName(ABinding.PeerIP,Names) then
        Memo1.Lines.Insert(0,Names+':'+STR)//Memo1.Lines.Add(Names+':'+Str
      else
        Memo1.Lines.Insert(0,ABinding.PeerIP+':'+STR);//Memo1.Lines.Add(ABinding.PeerIP+':'+Str);
    end;