Zdravím,
rád bych si vytvořil nějakou hru který by obsahovala MultiPlayer. Jakou knihovnu/framework byste mi doporučili na Windows pro komunikaci a přijímání a odeslání dat. Jaký máte názor na RakNet ?
V ramci toho ako vidim tvoje ostatne posty tu na fore, by som ti odporucal zacat tu http://en.wikipedia.org/wiki/OSI_model a tu http://msdn.microsoft.com/en-us/library/windows/desktop/ms740673%28v=vs.85%29.aspx
Viem ze to nie je to co si si zelal, ale skor by si mal najprv pochopit ako to cele funguje a vyskusat si taky jednoduchy server / klient spravit sam, ako hned pouzivat rozne networking frameworky.
Tiez viem ze mozno tu ludia so mnou nebudu suhlasit, pretoze je to ako vymyslat znova koleso, ale nie su prave skusenosti a znalosti to cenne v obore IT? Je sice pekne ze niekto dokaze z frameworkov zlepit program, ale co z toho ak netusi ako to funguje. Tu potom vznikaju ti pseudo-programatori.
Ahoj,
já používám k síťování výhraně BSD sockety (třeba tady je hezký návod http://www.linuxhowtos.org/…+/socket.htm), já vím, je to UNIX, ale ty principy sou v základě stejný
V síťové komunikaci existují v základě 2 modely, UDP a TCP. Jde o to, že:
UDP je nespojovaná komunikace - něco pošlu na IP adresu + číslo portu a nestrám se, jestli to tam došlo => Je to hodně rychlý, malej objem dat, ale nespolehlivý.
TCP - pomalejší, udrží spojení, zajistí doručení dat.
Souhlasím s metthalem, že když si něco přečteš atd, tak to bude určitě ku prospěchu. Dál bych upozornil, že když se budeš pouštět do síťování tak bys měl vědět že většinou ruku v ruce s tím jde paralelismus, takže bys měl taky něco vědět o vláknech.
Ale myslíš že když na googlu zapátráš: "Client-server C++ tutorial" že toho musíš najít moře :)
Myslel jsem spíše TCP/IP protokol (nebo proč používát UDP nevýhody/výhody znám ...), a jinak sockety jsem už skoušel sice jsem si vytvořil server a clieta ale bylo to komunikace ve smyslu Server ---><--Client to znamená že když se tam připojil další client musel čekat. To znamená že bych si musel vytvořit vlákno je to pravda? No jinak s RakNetem no nevim nevim... Hodilo by se mi něco ve smyslu kde bych měl předefinované eventy jako OnReceive, OnSend ... prostě když už framework tak ať tu špinavou práci za mě dělá :D. Daky za rady.
Hej. Musel by si si vytvorit dalsie vlakno, alebo forknut proces. Bud to mozes riesit jednoducho polopate tak, ze pre kazdeho klienta vytvoris nove vlakno, odkial sa budu nacitavat zneho data. Avsak tento model je nevyhodny pre vysoke pocty klientov. Preto by skor bolo vhodne pouzit nonblocking sockety a zistovat pomocou funkcie select() zmeny na socketoch. Hadzal by si potom do queue poradie v akom potrebujes spracovavat pripojenie a bezalo by ti napriklad 5 vlakien, ktore by tahali data z queue a spracovavali.
Pri tom poslednom modely vsak bacha na synchronizaciu dat medzi threadmi, treba si pozriet ako funguje taky mutex. Ja osobne uz par mesiacov pracujem na svojom vlastnom network engine (robim to len tak po veceroch po robote) a pouzivam priblizne rovnaky model ako som ti popisal.
Není nutné mít více vláken. WinSock API má funkci WSAAsyncSelect , která pak zajistí zasílání zpráv (FD_ACCEPT, FD_READ, FD_CLOSE) když data přijdou, když se někdo připojí, když je soket odpojen atd... V knize "C/C++ hotová řešení" je ukázka hotového serveru pro chat, kde je funkce WSAAsyncSelec použitá.
Nechapeme sa. Sockety bezia bud v blocking/sync rezime, async alebo non blocking. Async rezim podporuje standartne len WinSock. BSD sockety maju len prvu a tretiu moznost. Bud blocking, alebo non blocking, tj select()om vyberies sockety a recv() a send() neblokuju vlakno. Async rezim je specificky tym ze dostavas stavove hlasenia o socketoch, je to asi najjednoduchsie co sa da spravit, ale vravim, keby to chces robit pre Linux, musis si to spravit cez non blocking sockety.
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku