+---------------------------+ | Programování síťových her | +---------------------------+ Tak trochu teorie na úvod Pro komunikaci mezi programy po síti musíme mít v počítači (překvapivě :-) síťovou kartu. Mno, máme teda 2 PC spojené po síti a chceme si něco zahrát. Pro přenos informací po kabelu zajišťuje síťový protokol. V sítích Ethernet (většina LAN, dnes se prakticky s ničím jiným mezi PC nesetkáte) se používají protokoly IPX a SPX. Tyto obsluhují komunikaci rovný-s-rovným, tj. mezi dvěma pracovnímy stanicemi a nebo stanicí - serverem. Pro posílání dat a hraní her tím pádem není server potřeba. Stačí jen nahrát IPX\SPX protokoly a vesele pařit. Protokoly IPX-SPX obvykle obstará následující sekvence souborů: lsl.com - ovladač linkové vrstvy driver.com - ovladač od síťové karty, dodává výrobce a nebo můžete použít univerzální. Třeba pro kartu NE2000 je to soubor NE2000.COM ipxodi.com - vlastní protokoly. Ve stejném adresáři musíte mít součastně soubor net.cfg kde je uložená konfigurace síťovky. Pakety Pokud se něco posílá po síti, data se rozdělí na malé kousky jménem pakety zhruba o velikosti 570 bytů a podobně jako sektory na disku se posílají postupně za sebou. Každý paket obsahuje data a hlavičku, kde jsou údaje o odesílateli a příjemci, vlastník a podobně. Každý protokol používá jinou strukturu paketu. Socket Další pojem, na který narazíte při nastavení sítě je socket. Představte si situaci, kdy na jednom počítači běží víc programů zaráz (Nějaký rezidenty, síťový shell) a všechny pracují na síti. Na tento počítač příjde packet ze sítě. A urve si jej ten, kdo má právě ma nastaven příjem. Kvůli tomuto byly zavadeny sokety. Soket je takova přihrádka, kterou si můžete otevřít a každý packet pro vás příjde právě vašemu programu do tohoto soketu. Soketů můžete mít otevřeno několik, je jich celkem 65 tisíc. Takže nehrozí, že by na vás nevyzbylo. Zase tak idilické to ale není. Jsou určité konvence pro používání soketů. Například soket č.1 je informační paket, č.3 je zpracování chyby, č.452 je služební oznamovací paket (Pro Nowel NetWare). Volně k dispozici jsou sokety od 4000h do 8000h. Větší než 8000h jsou registrované pro určité programy. Až uděláte nějaký síťový program, tak si jeho soket můžete nechat zaregistrovat :-), aby ho nikdo jiný nepoužíval. Protokoly IPX Protokoly IPX\SPX definovala jako standart firma Xerox. (To jen tak pro informaci, vždycky sem si myslel že Xerox dělá kopírky) Jedná se o protokoly dva. První je IPX. Jeho příjem není potvrzen, prostě se jenom pošle paket po drátě cílové stanici a ta si ho odchytne pro sebe. Úspěšnost bývá podle literatury 95 procent. Že je tento paket právě pro konkrétní počítač se pozná podle cílové adresy, která musí být jedinečná. Dá se také poslat všem, tj. protokol příjmou všechny stanice. Hlavní vlasnosti IPX: * Vysoká rychlost - posílá se jen jeden paket, čili žádné kontrolní a diagnostické pakety. * Dá se poslat všem - můžete ho poslat všem počítačům * Není zaručen příjem - po přijetí se nic nepotvrzuje, tudíž není jisté jestli to došlo. V drtivé většině případů ale spolehlivě dorazí k cíli. * Není zaručeno pořadí - Pakety mohou dojít v jiném pořadí než byly vyslány. * Mohou přijít dva stejné SPX Protokol SPX je pravý opak předchozího. Mezi dvěma počítači musí být navázáno spojení (říká se tomu relace) a ovladače se samy starají o správné dojití SPX packetu. Pomocí tohoto protokolu nelze v jednom spojení komunikovat s více počítači, jak je tomu u IPX. SPX je také pomalejší (v sítích Novell je to asi 5 procent). Hlavní vlastnosti SPX: * Zaručuje příjem - to co pošlete také dojde (když se paket stratí tak si vyžádá nové poslání paketu) * Zaručuje pořadí - pakety dojdou v stejném pořadí jako byly vyslány. * Odstraňuje zdvojování paketů - když dojdou dva stejné tak jeden smaže. Programovani IPX rozhraní IPX je asi nejrozšířenější protokol. Má obrovskou výhodu v tom, že jeden paket můžete zaráz poslat všem účastníkům. Takto snadno a rychle realizujete komunikaci každý s každým, když třeba hraje osm lidí zaráz. Pokud ale posíláte důležitá data, jako třeba soubory, si musíte sami ohlídat správné doručení a v případě kolize poslat požadavek na zopakování. Pro komunikaci se používají služby IPX-SPX rozhraní. Ty se volají podobně jako třeba služby dosu. viz. Seznam služeb IPX . Následující obrázek nastiňuje schéma práce s IPX. Většinou pokud něco chceme po ovladači, musíme mu s číslem služby strčit i stukturu ECB. Její přesný popis najdete výše. Jsou v ní uloženy informce pro ovladač, jako použitý soket, síťová adresa a pod. Dál potřebujeme IPX paket. Ten se skládá z hlavičky (30 Byte) a přenášených dat (0...546 Byte). Hlavičku musíte naplnit vším potřebným, jako jsou adresy, sokety, délku paketu a připojit na konec hlavičky samotná data. (A nebo použít jeden fragment pro hlavičku a druhý pro data.) +----------------------------+ |Služba "pošli paket do sítě"| |ES:DI -> ECB +------->+-------------------------+ +----------------------------+ |Struktura ECB | +-------------------------+ +-------------------------+<----------+Ukazatel na IPX hlavičku | |Připravená IPX hlavička | +-------------------------+ +-------------------------+ +----+Ukazatel na posílaná data| | +-------------------------+ +-----------------------+<-----+ |Posílaná data | +-----------------------+ Po předání struktury ECB ovladači (třeba při odeslání paketu) si ovladač uloží tento ECB do svého interního seznamu a co nejdříve jej odešle. Příznak InUseFlag signalizuje, jestli je požadavek už zpracován a nebo zatím jen čeká. Toto schéma a nastavování neplatí jenom pro vysílání paketu, ale i pro příjem a většinu dalších funkcí. Na všechny paketové operace musí být v záloze nejaký blok ECB v seznamu. Pokud dojde paket a nemáte požadavek na příjem, tak máte prostě smůlu. Ale je požné mít třeba 10 požadavků na příjem a postupně je aktualizovat. Tyto požadavky se ukládají do bufferu a jsou postupně obsluhovány. Někdy se může stát, že vám vaše požadavky na příjem někdo zruší. Dělá to třeba login. To silně vadí při psaní rezidentů, proto to musíte nějak ošetřit, třeba pomocí načasování a pravidelných kontrol. Kdyby jste chtěli dělat něco profesionálně, doporučuju si pořídit originální anglickou dokumentaci třeba od Novelu. A teď už konkrétní příklad. Skládá se ze dvou programů. První pošle zprávu po IPX protokolu vsem, do soketu 555h. Druhy tento paket přijme a zobrazí jej na obrazovce. tst_odes.asm - odeslání paketu (odkaz na stejne soubory) tst_prij.asm - příjem paketu Často je problém mít naráz dostupné dva počítače v síti. Proto můžete použít fintu-Amálku. Otevřete si na svém počítači soket, dáte si požadavek na příjem paketu a když pošlete potom něco do sítě sám sobě (použijete jako cílovou adresu svoji) a nebo všem (vyplněno 0FFh) dojde tento paket i vám. Tato metoda je spolehlivá a když to funguje na jednom počítači, tak to jede i na celé síti. Kdyby jste měli nějaké připomínky, napište mi na adresu viz. dole. Při úspěchu můžu v dalších číslech napsat o proceduře ERS (přerušení při dojití paketu) nebo dodat knihovny pro C / Pascal. Komat xstran02@stud.fee.vutbr.cz Toto všechno jsem samozřejmě nevymyslel ale nastudoval z literatury. Konkrétně: NetBIOS a IPX/SPX programování s využitím síťového rozhraní Autoři: Jaroslav Fojtík a Václav Valtr - Grada 1993 výheň