От всички компоненти, които Delphi осигурява поддръжка на приложения, които обменят данни по мрежа (интернет, интранет и локална), две от най-често срещаните TServerSocket и TClientSocket, и двете са проектирани да поддържат функции за четене и запис през TCP / IP връзка.
Компоненти на гнезда Winsock и Delphi
Windows Sockets (Winsock) предоставя отворен интерфейс за мрежово програмиране под операционната система Windows. Той предлага набор от функции, структури от данни и свързани параметри, необходими за достъп до мрежовите услуги на всички стекове на протоколи. Winsock действа като връзка между мрежовите приложения и базовите стекове на протоколи.
Компонентите на Delphi socket (обвивки за Winsock) оптимизират създаването на приложения, които комуникират с други системи, използвайки TCP / IP и свързани протоколи. С гнезда можете да четете и пишете връзки към други машини, без да се притеснявате за подробностите на основния мрежов софтуер.
Интернет палитрата на лентата с инструменти на Delphi с инструменти хоства
TServerSocket и TClientSocket компоненти, както и TcpClient, TcpServer, и TUdpSocket.За да стартирате връзка със сокет с помощта на компонент на сокета, трябва да посочите хост и порт. Общо взето, домакин указва псевдоним за IP адреса на сървърната система; порт указва идентификационния номер, който идентифицира връзката на сокет сървъра.
Проста еднопосочна програма за изпращане на текст
За да изградите прост пример, използвайки компонентите на сокета, предоставени от Delphi, създайте две форми - една за сървъра и една за клиентския компютър. Идеята е да се даде възможност на клиентите да изпращат някои текстови данни до сървъра.
За да започнете, отворете Delphi два пъти, създавайки един проект за сървърното приложение и един за клиента.
Страна на сървъра:
Във формуляр поставете един компонент TServerSocket и един компонент TMemo. В OnCreate събитие за формата добавете следващия код:
процедура TForm1.FormCreate (подател: TObject);
започвам
ServerSocket1.Port: = 23;
ServerSocket1.Active: = True;
край;
Най- OnClose събитието трябва да съдържа:
процедура TForm1.FormClose
(Подател: TObject; Var Действие: TCloseAction);
започвам
ServerSocket1.Active: = false;
край;
Клиентска страна:
За клиентското приложение добавете към формуляр компонент TClientSocket, TEdit и TButton. Въведете следния код за клиента:
процедура TForm1.FormCreate (подател: TObject);
започвам
ClientSocket1.Port: = 23;
// локален TCP / IP адрес на сървъра
ClientSocket1.Host: = '192.168.167.12';
ClientSocket1.Active: = true;
край;
процедура TForm1.FormClose (Подател: TObject; Var Действие: TCloseAction);
започвам
ClientSocket1.Active: = невярно;
край;
процедура TForm1.Button1Click (Подател: TObject);
beginif ClientSocket1.Active тогава
ClientSocket1.Socket. SendText (Edit1.Text);
край;
Кодът почти сам описва: когато клиент кликне върху бутона, текстът, посочен в компонента Edit1, ще бъде изпратен до сървъра с посочен порт и адрес на хоста.
Обратно към сървъра:
Последният щрих в тази извадка е да предостави функция на сървъра да „вижда“ данните, които клиентът изпраща. Събитието, което ни интересува, е OnClientRead - то се случва, когато сървърният сокет трябва да чете информация от клиентски сокет.
процедура TForm1.ServerSocket1ClientRead (Подател: TObject;
Socket: TCustomWinSocket);
започвам
Memo1.Lines. Добавяне (Socket ReceiveText);
край;
Когато повече от един клиент изпраща данни на сървъра, ще трябва да кодирате още малко:
процедура TForm1.ServerSocket1ClientRead (Подател: TObject;
Socket: TCustomWinSocket);
Var
i: цяло число;
sRec: низ;
beginfor i: = 0 да се ServerSocket1.Socket. ActiveConnections-1 dobeginwith ServerSocket1.Socket. Съединения [Ь] dobegin
sRec: = ReceiveText;
ако sRecr '' thenbegin
Memo1.Lines. Добавяне (RemoteAddress + 'изпраща:');
Memo1.Lines. Добавяне (sRecr);
край;
край;
край;
край;
Когато сървърът чете информация от клиентски гнездо, той добавя този текст към компонента Memo; добавят се както текстът, така и клиентът RemoteAddress, така че ще знаете кой клиент е изпратил информацията. При по-сложни реализации псевдоними за известни IP адреси могат да служат като заместител.
За по-сложен проект, който използва тези компоненти, разгледайте Delphi> Демонстрации> Интернет> Чат проект. Това е просто приложение за мрежов чат, което използва една форма (проект) както за сървъра, така и за клиента.