C++ SDL_net

C++ SDL_net
2020-05-28T21:02:52+02:00
2020-05-30T09:56:47+02:00
2022-12-06T11:10:36+01:00
Sansevier
Sziasztok
SDL_net-tel szeretném (C++) megoldani hogy a játék elején az én gépem (szerver) elküldje a megfelelő adatokat a többi játékosnak az ő gépükre és a játék végén vagy közben 1-1 játékostól pedig adatokat kérnék be majd küldenék ki újra. Az adatok vagy számok lennének 1-20 max értékben vagy karakterek. 
Azonban még sose foglalkoztam ilyesmivel. A játékrészt SDL-ben megtudom csinálni. De ezzel a hálózati résszel nem sikerült semmire se jutnom. 
Tudna valaki ebben segíteni?
Mutasd a teljes hozzászólást!
Ugyanazt a kodot hasznaltam amit bemasoltal ide csak a kliensben modositottam a hostot "127.0.0.1"-re a portot pedig 1234-re. Tehat ezt a sort:

SDLNet_ResolveHost(&ip,"www.linux.org",80);
lecsereltem erre:

SDLNet_ResolveHost(&ip,"127.0.0.1",1234);
A forditast lathatod a kepen. Utana elinditottam elobb a szervert aztan a klienst. Esetleg probald ki parancssorbol te is(bar az include es link konyvtarakat modositanod kell).

Itt a kod: SDL net example
Mutasd a teljes hozzászólást!

  • Tudna valaki ebben segíteni?

    Termeszetesen
    Mutasd a teljes hozzászólást!
  • Nagyon vicces volt. Szakadok a nevetéstől.

    Már próbáltam a google-t. Rengeteg oldalt átnéztem már. Pont azért jöttem ide mert nem találtam semmit amit tudtam volna használni és reméltem itt találok valakit aki hajlandó segíteni. De köszönöm a szétrágott csont szint alatti közhelyes semmit.
    Mutasd a teljes hozzászólást!
  • Hali!

    Pont azért jöttem ide mert nem találtam semmit amit tudtam volna használni és reméltem itt találok valakit aki hajlandó segíteni.

    Segítség alatt pontosan mit értesz? Mert ha azt, hogy valaki megtanítja neked az SDL_net használatát (akár C++ vonatkozásában), akkor nem jó helyen jársz. Ugyanis a Tudástár a konkrét kérdések, megoldandó problémák helyszíne. Ehhez pedig olyan dolgok kellenek, mint konkrét forráskód(-részlet), infók arról, hogy eddig mivel/hogyan próbálkoztál, meddig jutottál el, hol/miben akadtál el, mi nem megy.

    Mutasd a teljes hozzászólást!
  • Server

    #include <iostream> #include <SDL.h> #include <SDL_net.h> #include <cstring> int main(int argc,char** argv) { SDL_Init(SDL_INIT_EVERYTHING); SDLNet_Init(); IPaddress ip; SDLNet_ResolveHost(&ip,NULL,1234); TCPsocket server=SDLNet_TCP_Open(&ip); TCPsocket client; const char* text="HELLO CLIENT!\n"; while(1) { client=SDLNet_TCP_Accept(server); if(client) { //here you can communitcate with the client SDLNet_TCP_Send(client,text,strlen(text)+1); SDLNet_TCP_Close(client); break; } } SDLNet_TCP_Close(server); SDLNet_Quit(); SDL_Quit(); }
    Client

    #include <iostream> #include <SDL.h> #include <SDL_net.h> #include <cstring> int main(int argc,char** argv) { SDL_Init(SDL_INIT_EVERYTHING); SDLNet_Init(); IPaddress ip; //write "127.0.0.1",1234 to connect to the server.cpp on your local machine SDLNet_ResolveHost(&ip,"www.linux.org",80); const char* http="GET / HTTP/1.1\nHost: www.linux.org\n\n"; TCPsocket client=SDLNet_TCP_Open(&ip); SDLNet_TCP_Send(client,http,strlen(http)+1); char text[10000]; while(SDLNet_TCP_Recv(client,text,10000)) std::cout << text; SDLNet_TCP_Close(client); SDLNet_Quit(); SDL_Quit(); }
    Ezt a két kódot is találtam többek között. Ezek egész ígéretesnek tűntek , lefordításkor nem volt hiba. Azonban nem tudtam működésre bírni őket. Ezek az eredeti kódok amiket letöltöttem. (az SDL inkludálásánál módosítottam kicsit csak mert nekem így találja meg )
    Próbáltam át írni a kódot elsődlegesen az IP és port részt. Commandból el indítani és ott meg adni neki az IP címet és a portott megnyitáskor. (meg még kismillió dolgot ezzel és másik programokkal).

    A kód a hibás? vagy ha nem akkor mit kéne és hogyan csinálnom ahhoz hogy sikerüljön működésre bírnom?
    Mutasd a teljes hozzászólást!
  • Azonban nem tudtam működésre bírni őket.

    Javaslom a masodik pontot innen es/vagy innen elolvasni es alkalmazni. Sokat segitene abban, hogy segithessunk.
    Mutasd a teljes hozzászólást!
  • CodeBlocks 20.03
    Windows 10

    Cél az lenne amit már a kérdésben is írtam hogy tudja adatokat küldeni és fogadni másik gépeknek/től.

    Ami történt: feljött a console ablak amibe villogott a kurzor és nem lehetett beírni semmit. Egyéb esetben volt hogy lefutott program mint aki jól végezte a dolgát és nem történt semmi vagy kiírta hogy leáll a működése és kikapcsolt.

    A kódot már ott van.

    Hiba üzenet nem volt.

    Amit már meg próbáltam és amik történtek azokat már leírtam.

    Amennyiben valamit kihagytam akkor szólj és pótolom azt is.
    Mutasd a teljes hozzászólást!
  • Amennyiben valamit kihagytam akkor szólj és pótolom azt is. 

    SDL verzio?
    Mutasd a teljes hozzászólást!
  • Nalam mukodik a kodod.

    Az eredeti verzio is ami a linux.org-ot hivja meg es ha modositom a cimet "127.0.0.1:1234"-re akkor is.
    Amit el tudok kepzelni az az, hogy a codeblocks bezarja az eredeti ablakot es ezert nem latod a sikeres futas eredmenyet. Tegyel egy std::cout << "Done\n"; a szerver vegere es varj egy inputra a szerver es a kliens vegen is, hogy az ablak nyitva maradjon.

    Ignorald a hibat a csatolt kepen. WSL alol futattom a kodot es nincs X.
    Mutasd a teljes hozzászólást!
    Csatolt állomány
  • Légyszíves írd le lépésről lépésre hogy pontosan mit is csináltál. Mit hogyan indítottál el stb.
    Mutasd a teljes hozzászólást!
  • Ugyanazt a kodot hasznaltam amit bemasoltal ide csak a kliensben modositottam a hostot "127.0.0.1"-re a portot pedig 1234-re. Tehat ezt a sort:

    SDLNet_ResolveHost(&ip,"www.linux.org",80);
    lecsereltem erre:

    SDLNet_ResolveHost(&ip,"127.0.0.1",1234);
    A forditast lathatod a kepen. Utana elinditottam elobb a szervert aztan a klienst. Esetleg probald ki parancssorbol te is(bar az include es link konyvtarakat modositanod kell).

    Itt a kod: SDL net example
    Mutasd a teljes hozzászólást!
  • Lefuttattam .exe-ből a programot. A server oldali azonnal bezárult amikor a client-et elindítottam. A client pedig a végtelenségig írta a HELLO-s szöveget.

    Működik. 

    Köszönöm az segítséget.
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd