Pozdrav svima :)
Nisam nasao funkcionalni odgovor na netu (ili nisam znao sta tacno da trazim?), a kako nisam vican mreznim protokolima zamolio bih za pomoc iskusnije programere. Sta je problem? U pitanju je igra (Age of Empires 2, DirectX7, DirectPlay), koja za igranje preko neta (rutera) trazi otvorene (forward) portove od 2300 do 2400 (tcp/upd), i port 47624 (tcp). Najlakse je forwardovati potrebne portove, i nema zime - medjutim, ideja je da se vecem broju korisnika koji se ne snalaze sa podesavanjima routera omoguci online igranje bez glavobolje.
Kako programirati aplikaciju (klijent/server) koja moze omoguciti igranje bez potrebe za otvaranjem portova?
E sad, da ne bi neko rekao kako ne moze, da ne znam da moze ne bih ni pitao ;) Primer je program
GameRanger, koji radi upravo to - i pored zatvorenih (tj. neprosledjenih) portova omogucava igranje bez ikakvih problema. Iako i na samom sajtu programa pise da ne znaci da ce uvek sve raditi kako treba, u velikom broju (mislim preko 90%) slucajeva korisnici koji inace ne mogu da igraju preko neta (zbog rutera ili raznih problema sa portovima), preko GameRanger-a igraju sasvim valjano.
Za one koji imaju iskustva sa mreznom komunikacijom i citanjem logova, prilazem
Wireshark logove, uz objasnjenja.
(napomena - portovi nisu forwardovani)
GameRanger(start,idle,close).pcap -- pokrecemo aplikaciju GameRanger, ostavljamo je da radi, gasimo je.
GameRanger(start,idle,host,close).pcap -- pokrecemo aplikaciju GameRanger, ostavljamo je da radi, otvoramo novu sobu (host), gasimo aplikaciju. Prilikom otvaranja (host-ovanja) sobe aplikacija prijavi da portovi nisu otvoreni, i nudi par opcija medju kojima biramo "Continue" - bez obzira na obavestenje i na zatvorene portove, ipak sve radi kako treba,
GameRanger(host, play).pcap -- aplikacija vec radi, soba vec otvorena (host). Prikljucuje nam se drugi igrac, ukljucujemo Wireshark log-ovanje, pokrecemo igru (start, launch). Pojavljuje se meni igre na kom vidimo i drugog igraca (uspesno ostvarena konekcija i pored zatvorenih portova oba racunara).
GameRanger.pcap -- (isto kao prethodno, drugi primer) aplikacija vec radi, soba vec otvorena (host). Prikljucuje nam se drugi igrac, ukljucujemo Wireshark log-ovanje, pokrecemo igru (start, launch). Pojavljuje se meni igre na kom vidimo i drugog igraca (uspesno ostvarena konekcija i pored zatvorenih portova oba racunara).
Da li neko ima neku ideju kako se ovde ostvaruje komunikacija (iz prilozenih logova, ili iz iskustva..?), i kako da nesto slicno sami napravimo? Odgovaralo bi u C#, ali ni C++ nije problem, samo da nadjemo resenje :) (mislim da je i GameRanger radjen u C++). Idealno bi bilo da se komunikacija odvija p2p (direktno izmedju igraca), a da eventualno server posluzi kao posrednik pri ostvarivanju konekcije.
Hvala unapred.
[Ovu poruku je menjao ((BugA)) dana 13.02.2010. u 20:13 GMT+1]