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