xkor,
Они либо в д7 так криво выглядят, либо ты специально не все выложил, там 1 сплошной код, даже скомпилить и посмотреть нельзя (
PanAm,
С приведенным тобой кодом зависает абсолютно на любом сервер, а с кодом Хкора, только на абисе, ну и еще на парочке
Добавлено через 4 минуты
ПС Трейсом проверила , Size в итоге получается 186, пакет какой-то кривой, такого вида #0#0#0#0#1 итп, но это я думаю верно ... Он же не перекодирован в Hex, а зависает непосредственно на
Memo1.Lines.Add(StringToHex(pck,''));
Последний раз редактировалось Amorality, 21.08.2008 в 00:13.
Причина: Добавлено сообщение
Добавлено через 28 минут
вообщем, я не гуру в протоколах, темболее Логин-сервера, но вот через мой пример соединяясь с 217.13.197.170:2106 получаю пакет - EF 7C 28 5A 78 0A 20 49 18 00 - 10 байт, всегда одно и тоже, черте что, вот другой сервер (С4) дал - 00 B3 7F 66 1D 5A 78 00 00 00 00 - нормальный init для ревизии 785A.
Добавлено через 7 минут
а Может там порт поменяли, а на 2106-ом оставили ловушку для лошадей?
Добавлено через 56 минут
Тут говорили про абисс, но у него вроде LS - 85.112.114.102:2593
Добавлено через 1 час 10 минут
Вообщем тоже застопорился на отправке (хотя дело просто во времени) а потом как получить ответ от сервера? как узнать в TCPClient что пакет получен?
Последний раз редактировалось PanAm, 21.08.2008 в 18:06.
Причина: Добавлено сообщение
Старый добрый TclientSocket - и большинство вопросов подымаемых тут просто бы не задавалось.
Цитата:
У них вообще нет этих функций , нету ни Read ни Write , ни Send , ни Recieve , как с пакетами то работать?
хы.
ClientSocket1.Socket.SendBuf(blabla, blablabla); = отправка
в эвентах прием. а именно. в OnRead
чтото вроде
Socket.ReceiveBuf(blablabla, Socket.ReceiveLength);
procedure TForm1.ClientSocket1Error(Sender: TObject; Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; var ErrorCode: Integer);
begin
ErrorCode := 0;
Socket.Close;
end;
зы.
delphi Код:
IdTCPClient1.ReadBuffer(size, 2);
SetLength(pck, size-2);
IdTCPClient1.ReadBuffer(pck[1], size-2);//ты уже 2 байта в сайз считал.. куда тебя понесло полный пакет тянуть ?!
Memo1.Lines.Add(StringToHex(pck,' '));
не забудь склеить сайз и само тело пакета.
зы2
в идеале чтото вроде
delphi Код:
var
Buff: array [0..65535] ofAnsiChar;
len : Word;
begin//читаем длину пакета 2 байта поэтому это Word, 0..65535
IdTCPClient1.ReadBuffer(@len, 2);
//впихиваем это дело в буффер
CopyMemory(@Buff[0], @len, 2);
//читаем остаток пакета запихивая в буфер начиная с 3го байта
IdTCPClient1.ReadBuffer(@Buff[2], len - 2);
//готово. в массиве Buff у нас наш полученный пакет.
Memo1.Lines.Add(Format('получен пакет длинной %d, hex:'#10#13' %s', [len, ByteToHexStr(@Buff[0], len)]);
end;
на правильность синтаксиса и работоспособность кода не претендую. ибо не проверял.
зы3. я использую следующий байттохекс
delphi Код:
function ByteToHexStr(Data: Pointer; Len: Integer): String;
var
I, Octets, PartOctets: Integer;
DumpData: String;
beginif Len = 0thenExit;
I := 0;
Octets := 0;
PartOctets := 0;
Result := '';
while I < Len dobegincase PartOctets of0: Result := Result + Format('%.4d: ', [Octets]);
9:
beginInc(Octets, 10);
PartOctets := -1;
Result := Result + ' ' + DumpData + sLineBreak;
DumpData := '';
end;
elsebegin
Result := Result + Format('%s ', [IntToHex(TByteArray(Data^)[i], 2)]);
if TByteArray(Data^)[i] in [$19..$FF] then
DumpData := DumpData + Chr(TByteArray(Data^)[i])else
DumpData := DumpData + '.';
Inc(I);
end;
end;
Inc(PartOctets);
end;
if PartOctets <> 0thenbegin
PartOctets := (8 - Length(DumpData)) * 3;
Inc(PartOctets, 4);
Result := Result + StringOfChar(' ', PartOctets) +
DumpData
end;
end;
зы4.
прием оформляйте в нитях, не забывайте что читать вы должны с сокета ровно столько сколько там есть. в противном случае висяки обеспечены
Добавлено через 26 минут
2 Amorality. по поводу инжект длл. если реь идет про используемый в пакетхаке то код там мудренный но ничего "специальносделаного чтобы остальные непоняли или не скомпилили" там нет.
так же инжект просто перенавравляет соединение требуемого приложения на локальный сервер. тобишь на заранее открытый твоей программой серверный сокет. никакого чтения и отправки данных касаемо траффика там нет. все в самом пакетхаке.
Последний раз редактировалось alexteam, 21.03.2009 в 14:50.
Причина: Добавлено сообщение
За это сообщение alexteam нажился 2 спасибками от: