Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.03.2010, 16:44   #1
Johnson
кривокодер ;)
Форумчанин
 
Аватар для Johnson
 
Регистрация: 20.06.2008
Сообщений: 707
По умолчанию TClientSocket и коннект к игровому серверу...

Здравствуйте, уважаемые!
Проблема такая: хочу приконнектиться к игровому серверу Lineage, но не получается разобраться с сокетами... Скурил массу мануалов, но про нормальные потоки нигде не смог найти по-русски... Помогите разобраться пожалуйста...

Есть сейчас такой (частично работоспособный) код:

Код:
///////////////////////////
Procedure TSDIAppForm.Log(Data: string; Cnt:integer; FromServer:boolean);
begin if FromServer then memo1.Lines.Add('Get packet ('+IntToStr(Cnt)+' bytes):') 
else memo1.Lines.Add('Send packet ('+IntToStr(Cnt)+' bytes):');memo1.Lines.Add(Data);memo1.Lines.Add('---------------');end;
function TSDIAppForm.BToH(Data : array of Byte; len:integer) : String;
CONST HEXChars: array [0..15] of char = '0123456789ABCDEF';
VAR Nibble1 : Byte;Nibble2 : Byte;tStr,tmp : String;I: Integer;
begin for I := 0 to len - 1 do begin Nibble1 := (Data[I] AND $0F);
Nibble2 := (Data[I] AND $F0) SHR 4;
tStr := HEXChars[Nibble2]+HEXChars[Nibble1];tmp:= tmp+tStr+' ';end;Result:=tmp;
end;
///////////////////////////

procedure TSDIAppForm.Button1Click(Sender: TObject);begin
ClientSocket1.Host:='212.33.232.164';
ClientSocket1.Port:='2106';
ClientSocket1.ClientType:=ctBlocking;
ClientSocket1.Open;
end;
procedure TSDIAppForm.Button2Click(Sender: TObject);begin ClientSocket1.Close;end;

procedure TSDIAppForm.ClientSocket1Connect(Sender: TObject; Socket: TCustomWinSocket);
var CountReadBytes: Integer;
    MySocket: TWinSocketStream;
    ddBuffer : array[0 .. 999] of Byte;
begin
  memo1.Lines.Add('Connected to '+ClientSocket1.Host+':'+IntToStr(ClientSocket1.Port));memo1.Lines.Add('---------------');
  MySocket := TWinSocketStream.Create(Socket,60000);
  while not MySocket.WaitForData(100) do Application.ProcessMessages;
    // Получаем пакет BA 00 (Хотя тут должно ловиться KeyInit, а 0B это размер ключа...)
  CountReadBytes := MySocket.Read(ddBuffer, 1000);
    Log(BToH(ddBuffer,CountReadBytes),CountReadBytes,TRUE);
    // Получаем KeyInit (Почему без размера?)
  CountReadBytes := MySocket.Read(ddBuffer, 1000);
    Log(BToH(ddBuffer,CountReadBytes),CountReadBytes,TRUE);
end;

procedure TSDIAppForm.ClientSocket1Disconnect(Sender: TObject;Socket: TCustomWinSocket);begin memo1.Lines.Add('Disconnected');memo1.Lines.Add('---------------');end;
Соединяется с сервером и получает перве пакеты он нормально...
А вот дальше нужно в произвольное время (по кнопке, к примеру) отослать пакет на сервер (в этом же потоке) и принять ответ...
Никак не могу понять, как именно отправить правильно данные, и как принять ответ...

Если что протокол соединения должен проходить по такому сценарию: http://mmoworld.info/files/guide/packets.html#xxx
С шифрованием как-нибудь разберусь, мне необходимо только разобраться с приемкой/отправкой пакетов, очень надеюсь на Вашу помощь

PS: покажите на примере, как по OnClick кнопки отправить буфер, и как принимать пакеты, которые приходят в произвольное время, а не сразу после коннекта... очень благодарен буду за исходник похожего проекта.
"А как написать праграму?, "ришыти задачьку очинь нада" ©с форума. Жить становится интереснее, жить становится веселее...
{Быть или не быть} {Неуспешный суицид}
Johnson вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Delphi: движение маркера по игровому полю Blondy Gamedev - cоздание игр: Unity, OpenGL, DirectX 16 08.02.2010 12:25
[c++ + mysql] коннект к бд, селект, получение результата Pamparam Общие вопросы C/C++ 2 11.11.2009 15:22
Как обработать не валидный коннект?(delphi,winsock) zotox Работа с сетью в Delphi 1 02.08.2009 19:46
Как проверить есть ли коннект к хосту порта? zotox Помощь студентам 1 01.04.2009 17:11
Запросы к серверу xPAL Работа с сетью в Delphi 2 14.10.2008 19:39