Компоненты-сокеты в Delphi
Можно использовать следующие средства:
1) Windows Socket API (WinSock 2.0).Файл winsock.pas;
2) Компоненты ServerSocket и ClientSocket страницы Internet от компании Borland/Inprise;
3) Компонент PowerSock – реализация клиентского сокета от NetMasters. Компонент NMGeneralServer – программная модель серверного сокета (страница FastNet).
Рассмотрим использование компонентов ServerSocket и ClientSocket.
Клиент – инициатор соединения. К серверу могут подключиться несколько клиентов.
Компонент ServerSocket
Обеспечивает связь с несколькими клиентами. При каждом подключении создается новый сокет.
Свойства:
Port: integer; номер порта.
Active: boolean; true- активизируется режим ожидания соединения(режим прослушивания); false-закрывает соединения.
ServerType; режим ввода/вывода: StNonBlocking- неблокирующий(асинхронный), StThreadBlocking- блокирующий(синхронный).
Service : string ; – символьное имя сервиса (ftp , http , telnet и др.).
Теоретическое отступление
Операции ввода/вывода могут быть синхронными и асинхронными. В первом случае при вызове функции ввода/вывода приложение блокируется до его окончания.
Во втором случае – инициируется ввод/вывод и выполнение приложения сразу же продол-жается. Окончание ввода/вывода фиксируется по возникновению некоторого события. Часто первый случай называют блокирующим, а второй неблокирующим.
В случае блокирующего сервера запускается отдельный программный поток, отвечающий за связь с отдельным клиентом. По умолчанию это стандартный поток – TServerClientThread – формирует стандартные события.
Мы рассмотрим неблокирующий режим. При приеме данных и других ситуациях возника-ют события.
Socket: TServerWinSocket; собственно сокет серверной стороны.
Методы:
Пр. open; переход в режим ожидания соединений.
Пр. close; закрытие соединений.
События:
OnClientConnect – после подключения очередного клиента.
OnClientDisconnect – отключения клиента.
OnClientread – после прихода данных от клиента.
OnClientwrite – после отправления данных.
OnClientError: TSocketErrorEvent ; возникла ошибка.
Onlisten – после того, как заданы адрес и порт и перед тем, как компонент включается в ре-жим прослушивания.
Onaccept – после установки соединения.
Объект TServerWinSocket
Свойства:
Connection [index: integer]: tCustomWinSocket; список сокетов, соответствующих соедине-ниями с клиентскими сокетами.
ActiveConnection: integer; общее число соединений.
Data : pointer ; указатель на связанные с сокетом данные.
Методы чтения данных:
Ф. ReceiveLength: integer; возвращает число байт, которые могут быть приняты в ответ на оповещение клиента о передаче.
Ф. ReceiveBuf (var Buf ; count : integer) : integer; – чтение данных из сокета в буфер Buf, count – количество байтов которые нужно считать. Возвращает количество реально считанных байтов. Чтение “разрушающее” – данные удаляются из сокета.
Ф. Receivetext: string; читает принятые данные как строку.
Методы передачи данных:
Ф. SendBuf (var Buf ; count ; integer) : integer; посылает клиенту count байтов, находящихся в Buf.
Пр. SendText (const s : string); – передача строки.
Ф. SendStream (AStream : TStream) :boolean; – передача потока данных astream.
Поток уничтожается автоматически объектом TServerWinSocket.
Компонент СlientSocket
Свойства:
Host: string; доменное имя сервера (k1.net или k1), к которому подключается клиент
Address: string; IP-адрес сервера (192.168.0.1 – 4 числа от 0 до 255 разделенные точкой).
Port: integer //номер порта сервера – число соответствующее типу прикладного протокола, т.е. типу приложения. Есть зарезервированные http – 80 , FTP – 21 , SMTP – 25 и т.д.
СlientType : TClientType ;режим ввода/вывода – блокирующий / неблокирующий.
Socket: TClientWinSocket; собственно сокет клиентской стороны.
Active: boolean; true- подключиться к серверу, false- отключиться
Методы:
Пр. open; подключиться.
Пр. close; отключиться.
События:
OnConnect- после подключения.
OnDisconnect- после отключения.
OnRead – после прихода данных от сервера.
OnWrite –после отправки данных серверу.
Объект TСlientWinSocket
Методы приема и передачи данных те же, что и у TServerWinSocket.
3. Примеры использования
Настройка
Сервер: Port – 5000 , ServerType – StNonBlocking, active – true.
Клиент: Port – 5000 , СlientType – , StNonBlocking, Host – ‘k1’.
Подключение
clientsocket1.open;
Прием и передача данных
После приема данных возникает событие OnClientRead(на сервере) или OnRead(на клиен-те). В обработчиках этих событий следует извлечь принятые данные.
Procedure TClientForm.ClientSocketRead(Sender : TObject : Socket: TCustowWinSocket) ;
Begin
ListBox .Add (Socket . Receivetext) ;
end;
Часто взаимодействие клиент-сервер строится по схеме запрос-ответ. Сервер считывает за-прос, выполняет его и результат отсылает клиенту.
Для передачи данных следует в нужном месте вызвать метод передачи.
var s1:string;
…
s1:=’aaaa’;
clientsocket1.socket.sendtext(s1);
Похожие записи
No user прокомментировали сообщение
Оставить комментарий