问题描述
我有一个正在尝试转换的应用程序,但是服务器通信存在一些问题。这行:
procedure UDPServerUDPRead(Sender: TObject; AData: TStream; ABinding: TIdSocketHandle);
这给了我这个错误:
UDPServer.OnUDPRead引用的UDPServerUDPRead方法具有不兼容的参数列表。删除参考?
该过程的用法如下:
procedure TFrmMain.UDPServerUDPRead(Sender: TObject; AData: TStream; ABinding: TIdSocketHandle);
var
Buffer: Tarray1024ofChar ;
count: Integer;
begin
count := AData.Size;
if count > Length(Buffer) then exit;
AData.Read(Buffer,count);
if UDPServerActive then DataReceived(count,ABinding.PeerIP,ABinding.PeerPort,Buffer);
end;
这有什么问题?我应该改变什么?
解决方法
>= YourStartingDateTime) )
事件的签名从Indy 9更改为Indy 10。
在Indy 9中,当数据包到达时,会为您提供一个TIdUDPServer.OnUDPRead
对象,该对象包装原始数据。
在Indy 10中,当数据包到达时,将为您提供TStream
字节的原始数据数组。
因此,您需要相应地更新代码,例如:
TIdBytes
如果您可以更改type
// Char is a 1-byte AnsiChar in D7,but is a 2-byte WideChar in D2009+!
Tarray1024ofChar = array[0..1023] of AnsiChar{Char} // or,use Byte instead...
...
procedure TFrmMain.UDPServerUDPRead(AThread: TIdUDPListenerThread; const AData: TIdBytes; ABinding: TIdSocketHandle);
var
Buffer: Tarray1024ofChar;
count: Integer;
begin
count := Length(AData);
if count > Length(Buffer) then exit;
BytesToRaw(AData,Buffer,count);
if UDPServerActive then
DataReceived(count,ABinding.PeerIP,ABinding.PeerPort,Buffer);
end;
以接受DataReceived()
(或PAnsiChar
)而不是PByte
,则可以通过取消本地{ {1}}个变量:
Tarray1024ofChar