Problem z Proxy, Socketami...

0

Witam.

Na wstepie zaznacze, ze uzylem "Szukaj" na rozne sposoby i nie znalazlem odpowiedzi na moj problem.

Moj problem jest taki; mam aplikacje klienta (jest to gra internetowa Tibia) oraz serwer. Normalnie klient Tibii laczy sie docelowo do serwera; ale ja chcialbym aby laczyla sie przez dodatkowa aplikacje.

Zrobilem tak - wstawilem na forme 2 komponenty: ClientSocket i ServerSocket.

ClientSocket laczy sie z serwerem Tibijskim
ServerSocket laczy sie z klientem Tibii na innym porcie (7777)
Klient ma adres mojego proxy-programiku i laczy sie do niego.

Generuje zdarzenia onRead - aby wysylalo to drugim socketem...

ClientSocket->onRead wysyła przez ServerSocket
ServerSocket->onClientRead wysyla przez ClientSocket

Dodatkowo w kazdej funkcji znajduje sie kod ktory dodaje zesniffowane pakiety do list boxow.

Problem jest taki ze tylko pierwszy pakiet rzeczywiscie "leci" przez proxy; potem klient i serwer znow porozumiewaja sie normalne Oo!

Co wiecej, jak zaloguje sie do gry i wylacze proxy to moge grac dalej :| a jak wyloguje sie i bede probowal sie jeszcze raz polaczyc to wyskoczy "Cannot find host" (bo proxy jest wylaczone). O co tu chodzi?:|

Oto procedury:

[delphi]
procedure TForm1.TibiaClientClientRead(Sender: TObject;
Socket: TCustomWinSocket);
var
Lng: Integer;
Buffer: array[0..1024] of char;
begin

Lng := Socket.ReceiveLength;

Socket.ReceiveBuf(Buffer, Lng);

for i:=0 to Lng do
begin
ListBox1.Items.Add(IntToStr(Ord(Buffer[i])));
end;

TibiaServer.Socket.SendBuf(Buffer,Lng);

end;

procedure TForm1.TibiaServerRead(Sender: TObject;
Socket: TCustomWinSocket);
var
Lng: Integer;
Buffer: array[0..1024] of Char;
begin

Lng := Socket.ReceiveLength;

Socket.ReceiveBuf(Buffer,Lng);

for i:=0 to Lng do
begin
ListBox2.Items.Add(IntToStr(Ord(Buffer[i])));
end;

TibiaClient.Socket.Connections[TibiaClient.Socket.ActiveConnections-1].SendBuf(Buffer, Lng);

end;
[/delphi]

Proste, a nie działa :S Jak już mówiłem - tylko jeden pakiet przelatuje przez proxy, reszta łączy się jakby docelowo. This is strange :|

Prosze o szybka pomoc ;/

0

Już nieważne, ale mam inne pytanko ...

unsigned short NetworkMessage::GetU16()
{
  unsigned short v = ((m_MsgBuf[m_ReadPos]) | (m_MsgBuf[m_ReadPos+1] << 8));
  m_ReadPos += 2;
  return v;
}

Jak to zapisać w delphi? To z dwóch bajtów tworzy jeden short int

1 użytkowników online, w tym zalogowanych: 0, gości: 1