Készíts olyan elosztott rendszert, amely számítógépeket ábrázol, és üzenetküldéseket valósít meg közöttük az alábbi módon. Mindegyik számítógépet egy szerveroldali socketen keresztül kezelünk a rendszerben. A számítógépeknek van neve, valamint címe, ami egy egész szám 1024 és 65535 között, és egybeesik a socket portjának számával; feltételezhető, hogy ez különbözik mindegyik másik számítógép címétől. A számítógépek nincsenek kapcsolatban mindegyik másik számítógéppel, csak meghatározott szomszédaiknak tudnak üzeneteket küldeni -- egy távolabbi számítógépnek szóló üzenet csak több lépésben juthat el oda. A szomszédsági viszony irányítatlan (ha A tud üzenetet küldeni B-nek, akkor B is A-nak), és feltételezzük, hogy a számítógépek összefüggő gráfot alkotnak, azaz mindegyik elérhető mindenhonnan. Mielőtt a szokványos üzenetküldés megkezdődne, egy útválasztási (routing) fázis hajtódik végre. Mindegyik számítógép kiküld minden vele szomszédos számítógép felé egy olyan üzenetet, amelyben kihirdeti a saját címét. A fogadó számítógép megvizsgálja, hogy kapott-e már olyan üzenetet, amelyben ez a cím szerepel; ha igen, nem foglalkozik az üzenettel a továbbiakban. Ha a cím még ismeretlen, a fogadó gép eltárolja a routing táblájában, hogy az ilyen címre menő üzeneteket afelé a szomszédos számítógép felé kell majd továbbküldeni, ahonnan ez az üzenet érkezett. Ezenkívül a fogadó gép elküld egy-egy routing üzenetet mindegyik szomszédjának, immár a saját címét megadva a szomszéd helyén. Egy routing üzenet formátuma tehát az alábbi: routing Az alábbi példában az 56789-es című számítógéphez például a következő üzenet fut be többek között: routing 1234 4567 Az 56789-es gép eltárolja a routing táblájába a megfelelő információt, majd továbbküldi a szomszédainak a következő üzenetet. routing 1234 56789 Minden szokványos üzenethez meg van adva, hogy a program elindulása után hány ezredmásodperccel induljon el; feltételezzük, hogy eddigre már a routing üzenetek mindenhová eljutottak. Egy szokványos üzenet formátuma az alábbi. msg <üzenet sorszáma> Az alábbi példában befuthat a következő üzenet a 4567-es című gépre: msg 56789 1 otodikGep egyikGep Amikor egy gép megkap egy továbbítandó üzenetet, várakozzon egy keveset, majd küldje tovább a routing tábla szerinti következő gépnek az üzenetet, immár beleírva a saját nevét is az üzenet végére. Amikor egy gép a neki szóló üzenetet kap, írja bele a saját nevének megfelelő, txt kiterjesztésű fájlba, mikor kapta meg az üzenetet, és az melyik gépeken utazott keresztül. A program kétféle paraméterezéssel indítható. Ha egyetlen parancssori paramétert kap a program, ami egy létező fájl neve, akkor abból olvassa ki a számítógépek neveit és a küldendő üzenetek adatait. A fájl szerkezete az alábbi. ujgep egyikGep 1234 ujgep masikGep 1345 ujgep harmadikGep 4567 ujgep negyedikGep 56789 ujgep otodikGep 9999 kapcsolat 1234 1345 4567 kapcsolat 1345 56789 kapcsolat 9999 1234 kapcsolat 4567 56789 uzenet 1500 1 9999 56789 uzenet 5000 2 4567 1345 uzenet 3500 3 1345 56789 Minden sor külön utasítást ad, amelyre a sor első szava utal, illetve lehetnek a fájlban üres sorok is. Elsőként a gépek nevei és címei vannak felsorolva, majd az szerepel, hogy melyik gépek vannak kapcsolatban (a kapcsolat oda-vissza értendő), ezután pedig az szerepel, hogy az üzeneteket mennyi idővel (hány ezredmásodperccel) a kezdés után kell elküldeni, mi az üzenet sorszáma, ki a feladó, és ki a címzett. Feltételezhető, hogy a fájlból érvényes adatokat kapunk. A második indítási lehetőség: a parancssori paraméterek a számítógépek címeit tartalmazzák, kivéve az első két paramétert. Az első paraméter egy egész szám, megadja, hogy hány üzenetküldés legyen a rendszerben -- az üzenetek kiinduló és célszámítógépe véletlenszerűen legyen kiválasztva (természetesen ne essen egybe a kettő). A számítógépek közötti kapcsolatok is véletlenszerűek legyenek ebben az esetben, számukat a második parancssori paraméter adja meg. A számítógépek neve legyen gep1, gep2 stb. A rendszer nyissa meg továbbá a 23456 portot, ahová kliensek kapcsolódhatnak (egyszerre akár több is), és szöveges üzeneteket küldhetnek. Az üzenetek formátuma megegyezik a fenti fájlban szereplőkkel (ujgep, kapcsolat, uzenet). Új kapcsolat esetén új routing üzenetet kell a számítógépnek küldenie azon keresztül. Egy kliens küldhesse továbbá a "kilep" üzenetet is, amelynek hatására a program lépjen ki. (A szerverek leállításához küldhető nekik is kiléptető szöveges üzenet.) Minden fontos történésről jelenjen meg üzenet a sztenderd kimeneten.