Ügyfél-kiszolgáló a borland delphi-ban az aljzatok, az internet és a hálózat, cikkek, programozás alapján -

Tehát kezdjük az elméletet. Ha meggyőző orvos vagy (és nem látsz semmilyen algoritmust a szemében), akkor hagyd el ezt a részt.

A socket szerver algoritmusa

Mi teszi lehetővé a socket szervert? Milyen elven működik. A kiszolgáló a socket protokoll alapján egyszerre több ügyfelet is kiszolgálhat. Ezenkívül meghatározhatja a számuk korlátozását (vagy teljesen megszüntesse ezt a korlátozást, ahogy az alapértelmezés szerint történt). Minden egyes csatlakoztatott ügyfél számára a szerver különálló csatlakozót nyit meg, amelyen keresztül adatokat cserélhet az ügyféllel. Szintén kiváló megoldás egy külön folyamat létrehozása minden kapcsolathoz (Thread).







Vizsgáljuk részletesebben a rendszert:
  • Port-and-ServerType definíciók - annak érdekében, hogy az ügyfelek általában csatlakozhassanak a kiszolgálóhoz, a kiszolgáló által használt portnak pontosan meg kell egyeznie az ügyfél által használt porttal (és fordítva). A ServerType tulajdonság határozza meg a kapcsolat típusát (lásd alább a részletekért);
  • A foglalat nyitása - a foglalat és a megadott port megnyitása. Itt a várakozó ügyfélkapcsolat automatikus indítása (Listen) történik;
  • Ügyfélkapcsolat és adatcsere vele - az ügyfél csatlakozik, és adatcserét folytat vele. A lépéssel kapcsolatos további információk az alábbiakban találhatók ebben a cikkben és az aljzatokról (ügyfélrész) című cikkben;
  • Ügyfélkapcsolat - Az ügyfél leválasztja és bezárja a socket kapcsolatot a kiszolgálóhoz;
  • A kiszolgáló és a foglalat bezárása - A rendszergazda parancsával a szerver befejezi munkáját, lezárja az összes nyitott csatornát és megállítja az ügyfélkapcsolatok várakozását.

Meg kell jegyezni, hogy a 3-4. Pontokat többször megismételjük, azaz. ezek az elemek minden új kliens kapcsolat esetében végrehajtásra kerülnek.

A TServerSocket összetevő rövid leírása

Itt ismerkedhetünk meg a TServerSocket komponens alapvető tulajdonságaival, módszereivel és eseményeivel.

Socket-osztályú TServerWinSocket, amelyen keresztül hozzáférhet a nyílt csatornákhoz. Ezután megnézzük ezt a tulajdonságot részletesebben, mert valójában az egyik legfontosabb. Típus: TServerWinSocket;
A ServerType a szerver típusa. A következő két érték közül választhat: stNonBlocking - szinkron munka kliens aljzatokkal. Ezzel a szerverrel az ügyfelekkel az OnClientRead és az OnClientWrite eseményeken keresztül dolgozhat. A stThreadBlocking egy aszinkron típusú. Minden egyes ügyfélcsatornához külön folyamatot (szál) hoznak létre. Típus: TServerType;






ThreadCacheSize - a kliens folyamatok (téma) száma, amelyet a kiszolgáló gyorsítótárba helyez. Itt kell kiválasztania az átlagos értéket a kiszolgáló munkaterhelésétől függően. A gyorsítótárazás azért történik, hogy ne hozzon létre külön különálló eljárást minden alkalommal, és ne ölje meg a zárt aljzatot, hanem további felhasználásra. Típus: Integer;
Aktív - attól a pillanattól, hogy a szerver aktív-e vagy sem. Ie Valójában az True érték azt jelzi, hogy a kiszolgáló fut és készen áll az ügyfelek fogadására, és False - a kiszolgáló ki van kapcsolva. A kiszolgáló elindításához csak ezt a tulajdonságot kell True értékre állítani. Típus: logikai;
Port - az ügyfelekkel való kapcsolatok létesítéséhez szükséges port száma. A kiszolgálón és az ügyfeleken lévő portnak azonosnak kell lennie. A 1025 és 65535 közötti értékek ajánlottak, mert 1-től 1024-ig - a rendszer elfoglalhatja. Típus: Integer;
A szolgáltatás a szolgáltatás, amely meghatározza a szolgáltatást (ftp, http, pop, stb.), Amelynek portját használják. Ez egyfajta útmutató a portszámok és a különböző szabvány protokollok közötti levelezéshez. Típus: karakterlánc;

Megnyitás - elindítja a kiszolgálót. Valójában ez a parancs megegyezik azzal, hogy True értéket rendel az aktívhoz;
Bezárás - Megállítja a kiszolgálót. Valójában ez a parancs megegyezik azzal, hogy az értéket False értékhez hozzárendeljük az Aktív tulajdonsághoz.

OnClientConnect - akkor fordul elő, amikor az ügyfél létrehozott egy socket kapcsolatot, és vár egy kiszolgáló válaszra (OnAccept);
OnClientDisconnect - akkor fordul elő, amikor az ügyfél leválik az aljzatcsatornáról;
OnClientError - akkor jelenik meg, ha az aktuális művelet sikertelen; hiba történt;
OnClientRead - akkor fordul elő, amikor az ügyfél átadott valamilyen adatot a berbernek. Az adatokhoz való hozzáférés a Socket: TCustomWinSocket paraméterrel érhető el.
OnClientWrite - akkor fordul elő, amikor a kiszolgáló adatokat küld az ügyfélnek az aljzatra;
OnGetSocket - az eseménykezelő számára az eseményhez szerkesztheti a ClientSocket paraméterét;
OnGetThread - az esemény kezelőjeként egyedi folyamatok (Menet) meghatározása minden egyes ügyfélcsatorna számára, a szükséges TServerClientThread al-feladat hozzárendelése a SocketThread paraméterhez;
OnThreadStart. OnThreadEnd - akkor jelenik meg, amikor a subtask (folyamat, Thread) elindul vagy leáll;
OnAccept - akkor fordul elő, amikor a szerver elfogadja az ügyfelet, vagy tagadja a kapcsolatot;
OnListen - akkor fordul elő, amikor a kiszolgáló készenléti állapotba kapcsol.

TServerSocket.Socket (TServerWinSocket)

Gyakorlat és példák

És most vegye figyelembe a fentieket egy konkrét példához. A kész források letöltéséhez kattintson ide.

Tehát nagyon jó példa a TServerSocket használatára (ez a példa a leg vizuálisbb segédlet a komponens tanulmányozásához). Az alábbi források bemutatják az összes fontos kiszolgáló esemény naplózását, valamint a szöveges üzenetek fogadását és küldését:

Példa 1. A kiszolgáló működésének naplózása és megvizsgálása, az üzenetek küldése / fogadása a socketeken keresztül.