Ze wszystkich składników, które Delfy zapewnia obsługę aplikacji, które wymieniają dane przez sieć (internet, intranet i lokalny), dwie z nich są najczęściej TServerSocket i TClientSocket, oba są zaprojektowane do obsługi funkcji odczytu i zapisu przez połączenie TCP / IP.
Komponenty gniazd Winsock i Delphi
Windows Sockets (Winsock) zapewnia otwarty interfejs do programowania sieciowego w systemie operacyjnym Windows. Oferuje zestaw funkcji, struktur danych i powiązanych parametrów wymaganych do uzyskania dostępu do usług sieciowych dowolnego stosu protokołów. Winsock działa jako łącze między aplikacjami sieciowymi i stosami protokołów.
Komponenty gniazd Delphi (opakowania dla Winsock) usprawniają tworzenie aplikacji komunikujących się z innymi systemami za pomocą TCP / IP i powiązanych protokołów. Dzięki gniazdom możesz odczytywać i zapisywać połączenia z innymi komputerami bez martwienia się o szczegóły podstawowego oprogramowania sieciowego.
Paleta internetowa na pasku narzędzi komponentów Delphi obsługuje
TServerSocket i TClientSocket składniki, jak również TcpClient, TcpServer, i TUdpSocket.Aby rozpocząć połączenie przez gniazdo za pomocą komponentu gniazda, musisz określić host i port. Ogólnie, gospodarz określa alias adresu IP systemu serwera; Port określa numer identyfikacyjny identyfikujący połączenie gniazda serwera.
Prosty jednokierunkowy program do wysyłania tekstu
Aby zbudować prosty przykład z wykorzystaniem komponentów gniazd dostarczonych przez Delphi, utwórz dwie formularze - jedną dla serwera i drugą dla komputera klienckiego. Chodzi o to, aby umożliwić klientom wysyłanie danych tekstowych na serwer.
Aby rozpocząć, otwórz Delphi dwa razy, tworząc jeden projekt dla aplikacji serwera i jeden dla klienta.
Po stronie serwera:
W formularzu wstaw jeden komponent TServerSocket i jeden komponent TMemo. w Zdarzenie OnCreate do formularza dodaj następny kod:
procedura TForm1.FormCreate (Sender: TObject);
zaczynać
ServerSocket1.Port: = 23;
ServerSocket1.Active: = True;
koniec;
The OnClose wydarzenie powinno zawierać:
procedura TForm1.FormClose
(Nadawca: TObject; var Działanie: TCloseAction);
zaczynać
ServerSocket1.Active: = false;
koniec;
Strona klienta:
W przypadku aplikacji klienckiej dodaj do formularza składnik TClientSocket, TEdit i TButton. Wstaw następujący kod dla klienta:
procedura TForm1.FormCreate (Sender: TObject);
zaczynać
ClientSocket1.Port: = 23;
// lokalny adres TCP / IP serwera
ClientSocket1.Host: = '192.168.167.12';
ClientSocket1.Active: = true;
koniec;
procedura TForm1.FormClose (Sender: TObject; var Działanie: TCloseAction);
zaczynać
ClientSocket1.Active: = false;
koniec;
procedura TForm1.Button1Click (Sender: TObject);
beginif ClientSocket1.Active następnie
ClientSocket1.Socket. SendText (Edytuj1.Tekst);
koniec;
Kod sam się opisuje: kiedy klient kliknie przycisk, tekst podany w komponencie Edit1 zostanie wysłany na serwer z określonym portem i adresem hosta.
Powrót do serwera:
Ostatnim akcentem w tym przykładzie jest zapewnienie funkcji serwera, która „widzi” dane wysyłane przez klienta. Wydarzenie, które nas interesuje, to OnClientRead - ma miejsce, gdy gniazdo serwera powinno odczytać informacje z gniazda klienta.
procedura TForm1.ServerSocket1ClientRead (Sender: TObject;
Socket: TCustomWinSocket);
zaczynać
Memo1.Lines. Dodaj (gniazdo. ReceiveText);
koniec;
Gdy więcej niż jeden klient wysyła dane do serwera, będziesz potrzebować trochę więcej do kodowania:
procedura TForm1.ServerSocket1ClientRead (Sender: TObject;
Socket: TCustomWinSocket);
var
i: liczba całkowita;
sRec: strunowy;
beginfor i: = 0 do ServerSocket1.Socket. ActiveConnections-1 dobeginwith ServerSocket1.Socket. Połączenia [i] dobegin
sRec: = ReceiveText;
gdyby sRecr ' wtedy zacznij
Memo1.Lines. Dodaj (RemoteAddress + „wysyła:”);
Memo1.Lines. Dodaj (sRecr);
koniec;
koniec;
koniec;
koniec;
Gdy serwer odczytuje informacje z gniazda klienta, dodaje ten tekst do komponentu Memo; dodawany jest zarówno tekst, jak i adres zdalny klienta, dzięki czemu będziesz wiedział, który klient wysłał informacje. W bardziej wyrafinowanych implementacjach aliasy znanych adresów IP mogą służyć jako substytut.
W przypadku bardziej złożonego projektu korzystającego z tych komponentów zapoznaj się z Delphi> Dema> Internet> Czat projekt. Jest to prosta aplikacja do czatu sieciowego, która używa jednego formularza (projektu) zarówno dla serwera, jak i klienta.