Kaip keistis duomenimis tinkle naudojant Delphi

Iš visų komponentų, kurie Delfi teikia paramą programoms, kurios keičiasi duomenimis tinklu (internetu, vidiniame tinkle ir vietiniame tinkle) „TServerSocket“ ir „TClientSocket“, kurie abu yra skirti palaikyti skaitymo ir rašymo funkcijas naudojant TCP / IP ryšį.

„Winsock“ ir „Delphi“ lizdo komponentai

„Windows“ lizdai („Winsock“) teikia atvirą tinklo programavimo sąsają su „Windows“ operacine sistema. Čia pateikiamas funkcijų, duomenų struktūrų ir susijusių parametrų rinkinys, reikalingas norint prisijungti prie bet kurių protokolų krūvių tinklo paslaugų. „Winsock“ veikia kaip ryšys tarp tinklo programų ir pagrindinių protokolų krūvių.

„Delphi“ lizdo komponentai („Winsock“ aplankai) supaprastina programų, palaikančių ryšį su kitomis sistemomis, kūrimą naudojant TCP / IP ir susijusius protokolus. Naudodami lizdus, ​​galite skaityti ir rašyti per jungtis su kitomis mašinomis, nesijaudindami apie pagrindinės tinklo programinės įrangos detales.

Interneto paletė, esanti Delphi komponentų įrankių juostoje, yra

instagram viewer
„TServerSocket“ ir „TClientSocket“ komponentai taip pat TcpClient, „TcpServer“, ir „TUdpSocket“.

Norėdami užmegzti lizdo ryšį naudodami lizdo komponentą, turite nurodyti pagrindinį kompiuterį ir prievadą. Apskritai, šeimininkas nurodo serverio sistemos IP adreso slapyvardį; uostas nurodo ID numerį, kuris identifikuoja serverio lizdo ryšį.

Paprasta vienpusė programa tekstui siųsti

Norėdami sukurti paprastą pavyzdį naudodami „Delphi“ teikiamus lizdo komponentus, sukurkite dvi formas - vieną serveriui, kitą kliento kompiuteriui. Idėja yra suteikti klientams galimybę siųsti tam tikrus tekstinius duomenis į serverį.

Norėdami pradėti, du kartus atidarykite „Delphi“, sukurdami vieną serverio programos ir vieną kliento projektą.

Serverio pusė:

Į formą įdėkite vieną „TServerSocket“ komponentą ir vieną „TMemo“ komponentą. Viduje „OnCreate“ renginys formoje pridėkite kitą kodą:

procedūra TForm1.FormCreate (Siuntėjas: TObject);
prasideda
„ServerSocket1.Port“: = 23;
ServerSocket1.Active: = Tiesa;
galas;

„OnClose“ renginyje turėtų būti:

procedūra TForm1.FormClose
(Siuntėjas: TObject; var Veiksmas: „TCloseAction“;
prasideda
„ServerSocket1.Active“: = klaidinga;
galas;

Kliento pusė:

Norėdami pritaikyti kliento programą, į formą pridėkite „TClientSocket“, „TEdit“ ir „TButton“ komponentus. Įveskite šį kliento kodą:

procedūra TForm1.FormCreate (Siuntėjas: TObject);
prasideda
„ClientSocket1.Port“: = 23;
// vietinis serverio TCP / IP adresas
„ClientSocket1.Host“: = '192.168.167.12';
ClientSocket1.Active: = teisinga;
galas;
procedūra TForm1.FormClose (Siuntėjas: TObject; var Veiksmas: „TCloseAction“;
prasideda
„ClientSocket1.Active“: = klaidinga;
galas;
procedūra TForm1.Button1Click (Siuntėjas: TObject);
pradžia „ClientSocket1.Active“ tada
„ClientSocket1.Socket“. „SendText“ („Edit1.Text“);
galas;

Kodas beveik apibūdina save: klientui spustelėjus mygtuką, „Edit1“ komponento viduje nurodytas tekstas bus nusiųstas į serverį su nurodytu prievado ir pagrindinio kompiuterio adresu.

Atgal į serverį:

Paskutinis šio pavyzdžio dalykas yra suteikti serveriui funkciją „pamatyti“ duomenis, kuriuos klientas siunčia. Įvykis, kuris mus domina, yra „OnClientRead“ - jis įvyksta, kai serverio lizdas turi nuskaityti informaciją iš kliento lizdo.

procedūra TForm1.ServerSocket1ClientRead (Siuntėjas: TObject;
Lizdas: TCustomWinSocket);
prasideda
„Memo1.Lines“. Pridėti (lizdas. ReceiveText);
galas;

Kai daugiau nei vienas klientas siunčia duomenis į serverį, reikės šiek tiek daugiau koduoti:

procedūra TForm1.ServerSocket1ClientRead (Siuntėjas: TObject;
Lizdas: TCustomWinSocket);
var
i: sveikasis skaičius;
„sRec“: stygos;
pradėti i: = 0 į „ServerSocket1.Socket“. „ActiveConnections-1“ dobeginwith „ServerSocket1.Socket“. Jungtys [i] dobeginas
sRec: = ReceiveText;
jei „sRecr“ tada pradedama
„Memo1.Lines“. Pridėti („RemoteAddress +“ siunčia: ');
„Memo1.Lines“. Pridėti (sRecr);
galas;
galas;
galas;
galas;

Kai serveris nuskaito informaciją iš kliento lizdo, jis prideda tą tekstą prie „Memo“ komponento; pridedamas ir tekstas, ir kliento „RemoteAddress“, taigi jūs žinosite, kuris klientas atsiuntė informaciją. Sudėtingesniuose įgyvendinimuose žinomų IP adresų slapyvardžiai gali būti naudojami kaip pakaitalai.

Norėdami gauti sudėtingesnį projektą, kuriame naudojami šie komponentai, ištirkite „Delphi“> „Demos“> Internetas> Pokalbiai projektas. Tai paprasta tinklo pokalbių programa, naudojanti vieną formą (projektą) tiek serveriui, tiek klientui.