C++ - Síťová knihovna (Sockets) – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

C++ - Síťová knihovna (Sockets) – C / C++ – Fórum – Programujte.comC++ - Síťová knihovna (Sockets) – C / C++ – Fórum – Programujte.com

 

WUtttang
~ Anonymní uživatel
11 příspěvků
30. 7. 2012   #1
-
0
-

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 ?

Nahlásit jako SPAM
IP: 212.96.160.–
metthal
~ Anonymní uživatel
27 příspěvků
30. 7. 2012   #2
-
0
-

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.

Nahlásit jako SPAM
IP: 217.144.18.–
TheOndrap
~ Anonymní uživatel
305 příspěvků
30. 7. 2012   #3
-
0
-

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 :)

Nahlásit jako SPAM
IP: 88.102.250.–
zlz
~ Anonymní uživatel
634 příspěvků
30. 7. 2012   #4
-
0
-

Tak se naučí sockety a zjistí, že mu to laguje jako kráva a rok to bude pilovat. Nebo se na to vykašle :)

#1 WUtttang
Jo, RakNet je slušnej.

Nahlásit jako SPAM
IP: 78.156.159.–
WUtttang
~ Anonymní uživatel
11 příspěvků
30. 7. 2012   #5
-
0
-

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.

Nahlásit jako SPAM
IP: 212.96.160.–
metthal0
Duch
30. 7. 2012   #6
-
0
-

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.

Nahlásit jako SPAM
IP: 217.144.18.–
Radim
~ Anonymní uživatel
10 příspěvků
3. 8. 2012   #7
-
0
-

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á.

Nahlásit jako SPAM
IP: 84.42.223.–
Metthal
~ Anonymní uživatel
27 příspěvků
3. 8. 2012   #8
-
0
-

Lenze v pripade bsd socketov async neexistuje. Preto ja nikdy neodporucam async sockety. Niekto chce potom spravit to iste na linux a zisti ze to musi robit na select()e

Zasláno z mobilního telefonu.

Nahlásit jako SPAM
IP: 217.144.18.–
zlz
~ Anonymní uživatel
634 příspěvků
3. 8. 2012   #9
-
0
-

1. nepotřebuje další vlákno.
2. nepotřebuje select.
3. select je async.

Nahlásit jako SPAM
IP: 80.188.216.–
metthal
~ Anonymní uživatel
27 příspěvků
4. 8. 2012   #10
-
0
-

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.

Nahlásit jako SPAM
IP: 217.144.18.–
zlz
~ Anonymní uživatel
634 příspěvků
4. 8. 2012   #11
-
0
-

Jestli se snažíš říct, že select je přenositelný, tak souhlasím. Ale to je tady asi celkem jedno. Jinak Async jak ho definuješ ty není jen ve WinSock, viz. třeba AIO.

Nahlásit jako SPAM
IP: 80.188.216.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 108 hostů

Podobná vlákna

Sockets — založil koudis

Sockets — založil tomasek

Sitova karta — založil Zelenáč

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý