У меня есть некоторые проблемы при использовании Indy ( idTCPServer компонент) для чтения данных, отправленных клиентом, сами данные были отформатированы в шестнадцатеричном формате, поэтому я не могу использовать AThread.Connection.ReadLn (); для этого ...
Здесь мои образцы данных отправлены клиентом
24 24 00 11 12 34 56 FF FF FF FF 50 00 8B 9B 0D 0A
или
24 24 00 13 12 34 56 FF FF FF FF 90 02 00 0A 8F D4 0D 0A
PS : этов байтах шестнадцатеричный (длина данных может варьироваться в зависимости от команды, максимум 160 байт ), который я не могу получить строковое представление, так как $ 00 переведен в ноль (что означает, что я не могу использовать ReadLn)
Вот мой пример кода
procedure TfrmMain.IdTCPServerExecute(AThread: TIdPeerThread);
var
Msg : Array[0..255] of Byte;
begin
AThread.connection.ReadBuffer(Msg,SizeOf(Msg));
AThread.connection.WriteBuffer(Msg,MsgSize,true);
end;
этот код не будет работать, если клиент не отправит 255-байтовые данные, в то время как в моем случае длина данных может изменяться, я пробовал это, но ответ не выводился
procedure TfrmMain.IdTCPServerExecute(AThread: TIdPeerThread);
var
Msg : Array of Byte;
MsgSize : integer;
begin
MsgSize := AThread.connection.ReadInteger; //doesn't actually get packet length?
SetLength(Msg, MsgSize);
AThread.connection.ReadBuffer(Msg,MsgSize);
AThread.connection.WriteBuffer(Msg,MsgSize,true);
end;
так как именно я могу посчитать, сколько байтовых данных отправлено клиентом (длина пакета)?или кто-то может сказать мне правильный код для чтения данных?