[C++/Pakiety] Przesylanie pakietow

0

Witam, ostatnio postanowilem zrobic wiekszy skok w nauce c++. Myslalem nad roznymi programami aby napisac w tym celu, jednak wybralem bota. Pisząc go stanalem nad jedną rzecża. Zastanawiam sie nad wysylaniem pakietow do servera. Przypominam iz jest to gra rpg wiec server musi dac odpowiedz na wyslany pakiet. A więc pytania moje są takie:
Czy mam zrobić kolejke pakietow ktora wysyla dany pakiet co okreslony czas? Jednak co gdy internet bedzie dzialal wolniej, pakiety nie będą docierac zawsze.
A moze musze przechwycic pakiety klienta gry i sprawdzac czy server dal odpowiedz?

Prosze o pomoc, męcze sie nad tym ladne pare dni. A program ten da mi spore doswiadczenie w nauce.

Pozdrawiam.

0

Albo piszesz klienta-bota, który samemu gada z serwerem a samego klienta już nie używasz,
albo piszesz bot'a sterującego klientem (symuluje użytkownika), a klient sobie sam gada z serwerem.

0

Bota sterującego klientem. Ale co mam zrobić żeby wiedzieć, że dany pakiet doszedł do servera i moge wysłać kolejny?
Chodzi mi oto, że nie moge wysyłać pakiet po pakiecie, bo nie wszystkie dojdą jeżeli jest np chwilowe spowolnienie internetu. Probowałem kolejke pakietów, ktora jest oprozniana co sekunde. Ale to bezsensowne bo jest opoznienie 1000 ms,a poza tym moze jeszcze wolniej dzialac internet.

Pozdrawiam.

0

to:

Bota sterującego klientem.

przeczy w całej rozciągłości temu:

Ale co mam zrobić żeby wiedzieć, że dany pakiet doszedł do servera i moge wysłać kolejny?

Ale olać - uznajmy, że jednak piszesz bota bezpośrednio rozmawiającego z serwerem. Bo przecież w przeciwnym wypadku to nie ty miałbyś o tym myśleć, tylko klient... Lecimy dalej:

Chodzi mi oto, że nie moge wysyłać pakiet po pakiecie, bo nie wszystkie dojdą jeżeli jest np chwilowe spowolnienie internetu.Probowałem kolejke pakietów, ktora jest oprozniana co sekunde.

A co ty się przez UDP komunikujesz, czy co? Wszystko dojdzie, od tego jest warstwa TCP/IP żeby dochodziło. TCP/IP kolejkuje wszystko za ciebie.

Spokojnie opowiedz nam (:)) co robisz i czym robisz. Bo jak słyszę 'pakiet po pakiecie' to nawet mi rawsockets do głowy przychodzą, ale chyba się nie porwałeś na coś takiego, tylko lecisz zwykłym TCP/IP, a twoje pytania są zmyłą ;]

0

Ranides ma racje, TCP/IP kolejkuje pakiety. Pomylilem sie, chodzi mi dokladnie o to:

-Wywoluje funkcje ktora generuje pakiet ktory przenosi przedmiot z miejsca A na miejsce B (funkcja sprawdza czy przedmiot tam rzeczywiscie jest).
zaraz po tym..
-Wywoluje funkcje ktora generuje pakiet ktory przenosi przedmiot z miejsca B na miejsce A, nie powiedzie sie poniewaz tego przedmiotu jeszcze tam nie ma, bo server nie zdazyl dac odpowiedzi. (gdybym dal powiedzmy Sleep(1000), to by sie udalo, poniewaz przedmiot juz by sie przeniosl na miejsce B.

Owszem moge dawac jakis delay powiedzmy 1000 ms, ale gdyby internet dzialal jeszcze wolniej? to bym musial dac sleep(4000) na zapas, ale kazdy wie ze opoznienie 4000 ms nie jest dobrym rozwiązaniem.
Co więc zrobic? kolejka funkcji ktore generują te pakiety, ktora jest oprozniana co czas N. Przy czym N to ping?

Pozdrawiam.

0
gadzio napisał(a)

Co więc zrobic?
Odbierać pakiety od serwera. Komunikacja musi być dwustronna.

Masz kilka możliwości:

  1. bez udziału klienta, musisz obsłużyć cały protokół komunikacji
    BOT --<socket>--> SERWER
    BOT <--<socket>-- SERWER

  2. bot jedynie steruje programowo klientem
    BOT --<hook>--> KLIENT --<socket>--> SERWER
    BOT <--<hook>-- KLIENT <--<socket>-- SERWER

  3. bot "filtruje" wysyłane i odbierane wiadomości, modyfikuje je, blokuje, wysyła własne (hakerzy kiedyś tak atakowali ;) )
    KLIENT --<socket>--> BOT --<socket>--> SERWER
    KLIENT <--<socket>-- BOT <--<socket>-- SERWER

Jeśli protokół jest łatwy wybierz opcję 1.
Jeśli protokół jest trudny ale klientem można łatwo sterować (wydawać polecenia i odczytywać reakcję) to wybierz opcję 2 lub 3.
Jeśli obydwa zagadnienia są trudne to wybierz opcje 3.

0

A wie ktoś może jak przechwycić pakiety? po googlowaniu nic nie upolowałem

0

nie wiem jak na windowsie, ale na posixach sa takie dwa programiki, tcpdump i tcpflow, po prostu podejrzyj zrodla.

0

a nie sadzisz ze na windowsach bedzie kompletnie inaczej niz na *nixach? :))
gadzio - jesli chcesz lapac pakiety obcej, uruchomionej aplikacji, zwykle to sie robi przez dllinjection i udawanie warstwy winsocka. tylko nie pytaj znowu JAK, bo tego typu pytania sa walkowane przynajmniej raz na dwa miesiace. zerknij w archiwum.
jesli zas chcesz tylko 'obejrzec' pakiety, bez ingerencji w nie, np. zeby zobaczyc jak jest protokol skonstruowany - zainteresuj sie WireShark'iem

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