[C++/Pakiety] Przesylanie pakietow

[C++/Pakiety] Przesylanie pakietow
GA
  • Rejestracja:prawie 17 lat
  • Ostatnio:prawie 17 lat
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.

adf88
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 12 lat
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.

GA
  • Rejestracja:prawie 17 lat
  • Ostatnio:prawie 17 lat
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.

Ranides
  • Rejestracja:około 19 lat
  • Ostatnio:ponad 9 lat
  • Postów:892
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łą ;]

GA
  • Rejestracja:prawie 17 lat
  • Ostatnio:prawie 17 lat
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.

adf88
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 12 lat
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.

GA
  • Rejestracja:prawie 17 lat
  • Ostatnio:prawie 17 lat
0

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

dodekam
  • Rejestracja:około 19 lat
  • Ostatnio:prawie 16 lat
0

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


There is no system but GNU, and Linux is one of its kernels.
JID: dodek@jabber.org
quetzalcoatl
  • Rejestracja:około 18 lat
  • Ostatnio:ponad 6 lat
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


no to pojechałem z nieobecnością.. chwila przerwy i prawie rok przeleciał

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.