Írunk egy programot fájlok küldésére foglalatok, az internet és a hálózatok, cikkek, programozás -

A kezdők programozói (és én, amikor elkezdtem tanulni a Delphi-t), megkérdezik: hogyan tudom átvinni a fájlt a foglalatokon keresztül, ha a fájlon kívül sok információt továbbítanak az aljzaton keresztül. Úgy tűnik, hogy a probléma nem olyan bonyolult, de nem könnyű. Egy hosszú keresés után az interneten soha nem találtam hasznos cikket ebben a témában. Ezért úgy döntöttem, hogy megjavítom ezt a hibát, és ebben a cikkben megpróbálom segíteni a probléma megoldásában.

Írjunk egy olyan programot, amely fájlokat tud átvinni a socket (kliens és kiszolgáló) segítségével, valamint egyéb parancsokat, például néhány üzenetet. Az ügyfél fájlokat vagy parancsokat fog kapni, és a kiszolgáló elküldi. Ha az ügyfél mindent ír a pufferre, akkor a fájlon kívül parancsok is lesznek, és meg kell győződnünk arról, hogy a fájlok és parancsok semmilyen módon nem egyesülnek. Mégis, hogy figyelembe kell venni, hogy ha egy nagy fájl a szállítás, akkor vágjuk több csomagot, hogy van, továbbítja a fájl nem ugyanabban a csomagban, de egy pár, és OnClientRead esemény kerül többször kérte. Ez az átvitel fő problémája!

A parancsok elválasztására a fájlból először küldje el a következő sort az ügyfélnek: "file # file.txt # 16", azaz: parancs + határoló + fájlnév + határoló + fájlméret.
Ennek a parancsnak a fogadása után az ügyfél a fájlfogadási módba lép, és mindent beír a pufferbe, amíg a fájlméret megegyezik a fogadott adatok méretével. Így az ügyfél elválasztja a parancsokat a fájlból!

És így tovább írjuk a kódot:
Kezdjük a kiszolgálóval (elküldi a fájlt):

Helyezze a következő összetevőket az űrlapra: TServerSocket, TButton, TEdit, TProgressBar és TStatiusBar. Helyezze el őket a képen látható módon.
Telepítse a TServerSocket összetevőt, port: 1001.
Állítsa be a TStatusBar összetevőt, a SimplePanel változót true értékre.
A sorban. az átvitel fájlszáma be van írva, a TButton gomb a fájl átvitelére szolgál.

Először, adj hozzá egy puffert a fájlhoz globális változókhoz:

Most nyissuk ki az aljzatot az űrlap létrehozásakor:

Az alkalmazás végén nem szabad elfelejteni bezárni az aljzatot:

A gomb megnyomása elküldi a fájlt:

Az OnClientRead eseményen, a TServerSocket összetevőn írja be a következő kódot:

Ehhez a kiszolgálónak meg kell tennie a puffert, csak miután megkapta a fájlt. Ha megöli a puffert, közvetlenül az átviteli fájl után, az ügyfélnek nincs ideje a teljes fájl átvételére. Amint az ügyfél elfogadja a fájlt, elküldi a "vég" parancsot a kiszolgálónak, ami azt jelenti, hogy a fájl elfogadásra kerül, és a kiszolgáló megöli a puffert.

Most tesszük a szerverünknek néhány információt a kapcsolatról:
Az OnClientConnect eseményen, a TServerSocket összetevőn írja be a következő kódot:

Az OnClientDisconnect esemény esetében írja be:

Itt van a szerver és készen áll. Most menj az ügyfélhez (ez eltartja a fájlt) a PIM zavarban lesz még:

Nyilatkozni a változókról és a szüneteltetési eljárásról. Írja be a változókat privát módon. egyébként semmi sem fog működni:

Az űrlap létrehozásakor kapcsolatba lépünk a kiszolgálóval és várjuk a fájl átvitelét:

Az alkalmazás végén zárja le az aljzatot:

Szóval, csakúgy, mint a kiszolgálón, tegyük az ügyfelet a kapcsolatról:

Most be kell írnunk a kódot az Írásban. Ez az eljárás szükséges annak biztosítására, hogy a kapott adatok egy fájlba íródjanak. Eljárásmód:

Most a TClientSocket összetevő OnClientRead eseményén adja meg a következő kódot:

Így, ha egy nagy fájlt, és OnClientRead esemény lesz az úgynevezett nem egyszer, hanem több, akkor, ha az ügyfél fájl vételi mód, akkor rögzíti az adatokat a puffer, és ha nem, akkor az ügyfél határozza meg a kapott parancsot, és ha ez a fájl, a fájlfogadási módba kerül. Ha nem értesz valamit, akkor olvassa el a program kódját, nem véletlenül osztottam le mindent :-)

Nos, ez minden.
Az ügyfél és a szerver készen áll. Először indítsa el a kiszolgálót, majd az ügyfelet, és megpróbáljon több megabyte méretű fájlokat átvinni :-) 10-12 MB fájlt küldött a hálózaton problémamentesen.

Sok szerencsét a programozás!

Kapcsolódó cikkek