Из всех компонентов, которые Delphi обеспечивает поддержку приложений, которые обмениваются данными по сети (интернет, интранет и локальная сеть), два из наиболее распространенных TServerSocket и TClientSocketоба они предназначены для поддержки функций чтения и записи через соединение TCP / IP.
Компоненты Winsock и Delphi Socket
Windows Sockets (Winsock) предоставляет открытый интерфейс для сетевого программирования под управлением операционной системы Windows. Он предлагает набор функций, структур данных и связанных параметров, необходимых для доступа к сетевым службам любых стеков протоколов. Winsock действует как связующее звено между сетевыми приложениями и базовыми стеками протоколов.
Компоненты сокетов Delphi (оболочки для 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; вар Действие: 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; вар Действие: TCloseAction);
начать
ClientSocket1.Active: = false;
конец;
процедура TForm1.Button1Click (Отправитель: TObject);
beginif ClientSocket1.Active тогда
ClientSocket1.Socket. SendText (Edit1.Text);
конец;
Код в значительной степени описывает сам себя: когда клиент нажимает кнопку, текст, указанный внутри компонента Edit1, будет отправлен на сервер с указанным портом и адресом хоста.
Вернуться на сервер:
Последний штрих в этом примере - предоставить функцию для сервера, чтобы «видеть» данные, которые отправляет клиент. Интересующее нас событие - OnClientRead - происходит, когда сокет сервера должен прочитать информацию из клиентского сокета.
процедура TForm1.ServerSocket1ClientRead (Отправитель: TObject;
Сокет: TCustomWinSocket);
начать
Memo1.Lines. Добавить (Socket. ReceiveText);
конец;
Когда более чем один клиент отправляет данные на сервер, вам понадобится немного больше для написания кода:
процедура TForm1.ServerSocket1ClientRead (Отправитель: TObject;
Сокет: TCustomWinSocket);
вар
я: целое число;
SREC: строка;
beginfor я: = 0 в ServerSocket1.Socket. ActiveConnections-1 dobeginwith ServerSocket1.Socket. Соединения [I] dobegin
sRec: = ReceiveText;
если sRecr '' thenbegin
Memo1.Lines. Добавить (RemoteAddress + 'send:');
Memo1.Lines. Добавить (sRecr);
конец;
конец;
конец;
конец;
Когда сервер читает информацию из клиентского сокета, он добавляет этот текст в компонент Memo; добавляется и текст, и клиент RemoteAddress, чтобы вы знали, какой клиент отправил информацию. В более сложных реализациях псевдонимы для известных IP-адресов могут служить заменой.
Для более сложного проекта, использующего эти компоненты, изучите Delphi> Демоверсии> Интернет> Чат проект. Это простое приложение для сетевого чата, которое использует одну форму (проект) как для сервера, так и для клиента.