Не, это для меня пока сложновато
Вот нашла парочку процедур для Инди:
procedure ReadBuffer(var ABuffer; const AByteCount: Longint);
procedure WriteBuffer(const ABuffer; AByteCount: Longint; const AWriteNow: Boolean = False);
Кто-нибудь знает как их использовать?)
Добавлено через 16 минут
Вот , похоже уже что-то получилось, смогла сделать вывод текущего приходящего пакета в Memo , пришло правдо:
"п|(Zx"
(При простом коннекте к логин серверу) , нужно теперь научиться отправлять пакет, чтобы проверить, ответит ли мне логин сервер
Последний раз редактировалось Amorality, 16.08.2008 в 15:45.
Причина: Добавлено сообщение
Amorality, на хрень не ответит)
принимать пакет думаю стоит так:
delphi Код:
var
size: word;
pck: string;
begin
TCPClient.ReadBuffer(size, 2);
SetLength(pck, size-2);
TCPClient.ReadBuffer(pck[1], size-2);
// усё, пакет (не считая размера) в переменной pckend;
для удобочитаемости пакета вот функция перевода его HEX:
delphi Код:
function StringToHex(str1,Separator:String):String;
var
buf:String;
i:Integer;
begin
buf:='';
for i:=1toLength(str1)dobegin
buf:=buf+IntToHex(Byte(str1[i]),2)+Separator;
end;
Result:=buf;
end;
и обратно:
delphi Код:
function HexToString(Hex:String):String;
function SymbolEntersCount(s: string): string;
var
i: integer;
begin
Result := '';
for i := 1toLength(s)doifnot(s[i] in [' ',#10,#13])then
Result:=Result+s[i];
end;
var
buf:String;
bt:Byte;
i:Integer;
begin
buf:='';
Hex:=SymbolEntersCount(UpperCase(Hex));
for i:=0to(Length(Hex)div2)-1dobegin
bt:=0;
if(Byte(hex[i*2+1])>$2F)and(Byte(hex[i*2+1])<$3A)then bt:=Byte(hex[i*2+1])-$30elseif(Byte(hex[i*2+1])>$40)and(Byte(hex[i*2+1])<$47)then bt:=Byte(hex[i*2+1])-$37;
if(Byte(hex[i*2+2])>$2F)and(Byte(hex[i*2+2])<$3A)then bt:=bt*16+Byte(hex[i*2+2])-$30elseif(Byte(hex[i*2+2])>$40)and(Byte(hex[i*2+2])<$47)then bt:=bt*16+Byte(hex[i*2+2])-$37;
buf:=buf+char(bt);
end;
HexToString:=buf;
end;
__________________
Я здесь практически не появляюсь!, Skype - ikskor
Сначало пытаюсь разобраться с приемом пакета, в моем случае ( С выводом в Memo код будет таков?
try
IdTCPClient1.ReadBuffer(size, 2);
SetLength(pck, size-2);
IdTCPClient1.ReadBuffer(pck[1], size-2);
Memo1.Lines.Add(pck);
finally
Вот только зависает программа, когда нажимаю кнопку Connect Да так, что выключить ее можно только убив процесс, что делать ?
Добавлено через 1 минуту Amorality, зависает кста в каком месте?, или ты трейсером пользоваться не умееш?
Добавлено через 2 минуты
зависает наверно из за того что ты читаеш данные до соединения с сервером а эти функции чтения будут стоять на месте пока не получат данные которые если соединение ещё не установлено или если все данные уже прочитаны взять неоткуда...
__________________
Я здесь практически не появляюсь!, Skype - ikskor
Последний раз редактировалось xkor, 16.08.2008 в 17:39.
Причина: Добавлено сообщение
На счет того, что я выполняю это до соединения с сервером, быть такого не может, тк все, что между try и finally выполняется после Connect; а Коннект удачный, это я проверяю выводом сообщения на экран.
Трейсером я пользоваться не умею и не знаю что это ..
Зависает сразу после нажатия кнопки Connect , пробовала оставить на кнопке Коннект только КОннект, а твою процедуру перенести на отдельную кнопку, но все равно зависает после нажатия этой отдельной кнопки!