Новый сайт по новому адресу ignatiev.su - Игнатьев Иван
Если вы что-то искали и не нашли, или у вас возникли вопросы, пишите на e-mail: ivan@ignatiev.su

Новый блог по адресу Блог об ИТ и программировании на русском. Если вы хотите, чтобы я обновил, какие-либо статьи, пожалуйста напишите мне на email.


Примитивная работа с сетью в Delphi

В данной статье будут рассмотрены базовые свойства и функции компонентов Delphi: TClientSocket и TServerSocket – использующихся для работы с сетью по протоколу TCP\IP.

Внимание! Если вы используете версию Delphi выше 6.0, то предварительно вам необходимо установить Sockets Components, во всех версиях Delphi это делается следующим образом:

  • Заходим в диалог Install Packages… : (Главное меню) Component -> Install Packages;
  • Щелкаем по кнопке Add… , после чего находим папку Bin вашего Delphi (н-р: C:\Program Files\Borland\Delphi 7\bin , либо C:\Program Files\Embarcadero\RAD Studio\7.0\Bin );
  • В найденной папке Bin уже ищем файлик dclsockets[тут циферки].bpl, жмем ОК [Open, Открыть и т.п.];
  • Радуемся, потому что теперь на вкладке панели компонентов на вкладке Internet у нас появились два замечательных компонента TServerSocket и TClientSocket.

При разработке любых сетевых приложений обычно разработку всегда начинают с сервера (конечно если у вас есть команда, дизайнеры интерфейсов могут приступать к работе над клиентом). Для реализации сервера, удивительно, необходимо использовать TServerSocket.

Основные свойства:

  • Active – поле типа boolean, при установлении в true – сервер запускается, можно использовать, как присвоение конкретных значений, так и вызывая функции ServerSocket1.Open (… Active:=true;) или ServerSocket1.Close (… Active:=false).
  • Port – порт на котором будет прослушивать (принимать клиентов) сервер, любое не занятое другими серверами в системе значение в пределах диапазона integer.

Основные события:

  • OnListen – вызывается при установлении сервера в режим прослушивания, может испоьзоватся, когда нам нужно определить время реального старта сервера.
  • OnClientRead – вызывается в момент принятия данных от клиента.
  • OnClientError – вызывается при возникновении ошибки в передаче данных.
  • OnClientConnect – вызывается во время присоединения нового клиента к серверу.
  • OnClientDisconnect – обратное событие событию, OnClientConnect, вызывается во время отсоединения от сервера клиента.

у каждой функции события есть атрибут Socket: TCustomWinSocket, в него передаеться указатель на объект сокета с которым мы в данный момент работаем, если нам нужно что-то ответить или что-то сделать с клиентом, который вызвал событие, нам необходимо использовать именно этот объект, во всех остальных случаях мы используем ServerSocket1.Socket, аналогичная ситуация и с клиентским компонентом.

Readonly свойства и функции:

  • ServerSocket1.Socket.ActiveConnections – возвращает количество активных соединений.
  • ServerSocket1.Socket.Connections[] – массив объектов типа TCustomWinSocket, массив всех объектов связанных с клиентами, счет индексов начинается с 0, длинна массива равна ServerSocket1.Socket.ActiveConnections.
  • Функции и свойства, применимые к элементам массива ServerSocket1.Socket.Connections[] и передаваемому атрибуту Socket в функцию события сервера:
  • Socket.LocalHost – возвращает имя сервера в сети.
  • Socket.LocalAdress – возвращает IP сервера.
  • Socket.RemoteHost – возвращает имя клиента в сети.
  • Socket.RemoteAdress – возвращает IP клиента.
  • Socket.ReceiveText – возвращает принятое от клиента текстовое сообщение, после чего очищает буфер, можно использовать только 1 раз, за 1 прием.
  • Socket.SendText(Text) – отсылает клиенту текстовое сообщение Text типа string.

Для компонента TClientSocket все практически тоже самое, только наоборот + основное визуальное отличие сервера от клиента, сервер в системе может быть запущен 1 на 1 значение порта, в количестве клиентов вас ограничивает только оперативная память.

Основные свойства:

  • Active – поле типа boolean, при установлении в true – клиент пытается соединится с сервером, можно использовать, как присвоение конкретных значений, так и вызывая функции ClientSocket1.Open (… Active:=true;) или ClientSocket1.Close (… Active:=false).
  • Port – порт по которому клиент сможет присоединиться к серверу, любое значение в пределах диапазона integer.
  • Adress – IPv4 адрес сервера типа string по шаблону 255.255.255.255, с которым будет соединяться клиент.

Основные события:

  • OnRead – вызывается в момент принятия данных от севера.
  • OnError – вызывается при возникновении ошибки в передаче данных.
  • OnConnecting – вызывается во время присоединения клиента к серверу.
  • OnDisconnect – обратное событие событию, OnConnecting, вызывается во время отсоединения от сервера клиента.

Readonly свойства и функции:

  • ClientSocket1.Socket.SendText()– отсылает серверу текстовое сообщение Text типа string
  • Socket.LocalHost – возвращает имя клиента в сети.
  • Socket.LocalAdress – возвращает IP клиента.
  • Socket.RemoteHost – возвращает имя сервера в сети.
  • Socket.RemoteAdress – возвращает IP сервера.
  • Socket.ReceiveText – возвращает принятое от сервера текстовое сообщение, после чего очищает буфер, можно использовать только 1 раз, за 1 прием.
  • Socket.SendText(Text) – отсылает серверу текстовое сообщение Text типа string.

Предоставленной информации вполне достаточно, чтобы реализовать небольшой серверный чат, удовлетворяющий техническому заданию: internet_sockets.doc (Word Doc 97-2003, 26.5 Kb).

Tags: , ,

RSS 2.0 - Узнай первым, о обновлениях в комментариях к этой записи

2 комментария

  1. Здравствуйте, спасибо за отличную статью!
    Только у меня не получается передача данных, возникает ошибка на строчки:
    Edit1.Text:=ServerSocket1.Socket.LocalAddress;
    Edit5.Text:=ServerSocket1.Socket.RemoteAddress;
    Имя сервера отображается как 0.0.0.0.
    Кстати а как задавать адрес сервера?

  2. Помогло, спасибо!

Оставить комментарий