+---------------------------+
| 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ň