- •Работа с сокетами в Delphi
- •Установка компонентов
- •Работа с клиентскими сокетами (tClientSocket)
- •3) Отправка/прием данных.
- •Для приема или отправки данных необходимо использовать методы объекта tClientSocket.Socket:
- •Работа с серверными сокетами (tServerSocket)
- •Основные этапы работы с tServerSocket
- •Пример работы сокетами
Работа с сокетами в Delphi
Сокеты (от socket (англ.) — разъём, гнездо) — это программный интерфейс, обеспечивающий обмен информацией между процессами.
Одним из основных достоинств сокетного обмена информацией в сети можно назвать его гибкость. Главный принцип работы с сокетами состоит в отправке последовательности байт другому компьютеру, это может быть простое текстовое сообщение или файл.
Важно различать два типа сокетов: клиентские сокеты, исерверные сокеты.
Для работы с «клиентским» типом сокетов в Delphiсуществует компонентTClientSocket, с «серверными» сокетами можно работать при помощи компонентаTServerSocket.
Установка компонентов
Зачастую компоненты TServerSocket и TClientSocket не входят в стандартный пакет установки Delphi, но их можно установить дополнительно.
Зайдите на вкладку компонентов «Internet», и проверьте присутствуют ли там компоненты TServerSocket и TClientSocket, если нет, то установите их. Зайдите в меню "Component/Install Packages", затем нажмите кнопку "Add". В открывшемся диалоговом окне нужно найти файл "dclsocketsXX.bpl" (он лежит в папке bin, которая находится в папке с Delphi), где XX - это числовой номер версии вашего Delphi. Найдите файл, нажмите "Открыть", а затем в окне "Install Packages" нажмите "OK". Теперь, во вкладке "Internet" появились два компонента - TServerSocket и TClientSocket.
Работа с клиентскими сокетами (tClientSocket)
1) Определение свойств Port и Host.Для успешного соединения свойствамPortиHostкомпонента TClientSocket необходимо присвоить некоторые значения. В свойстве Port нужно указать номер порта для подключения (1 – 65535, но лучше брать из диапозона 1001 – 65535, потому что номера до 1000 могут оказаться заняты системными службами).
Host— хост-имя или IP-адрес компьютера, с которым требуется соединиться. Например, rus.delphi.com или 192.128.0.0.
2) Открытие сокета. Будем рассматривать сокет как очередь символов, передающихся с одного компьютера на другой. Открыть сокет можно, вызвав методOpen(компонент TClientSocket) или присвоив значениеTrueсвойствуActive. Тут нелишним будет поставить обработчик исключения на случай неудавшегося соединения.
3) Отправка/прием данных.
4) Закрытие сокета.По завершению обмена данными нужно закрыть сокет, вызвав методCloseкомпонентаTClientSocketили присвоив значениеFalseсвойствуActive.
Основные свойства компонента TClientSocket | |
Active |
Показатель того, открыт или закрыт сокет. Открыт – значение True, закрыт – значение False. Доступно для записи. |
Host |
Хост-имя, с которым нужно соединиться |
Address |
IP-адрес компьютера, с которым нужно соединиться. В отличие от Host, здесь может быть указан только IP. Разница состоит в том, что если в Host указано буквенное имя компьютера, то IP запросится у DNS |
Port |
Номер порта компьютера, с которым нужно соединиться (1-65535) |
ClientType |
Содержит тип передачи данных: ctBlocking— синхронная передача (OnReadиOnWriteне работают). Синхронный тип подключения подходит для поточного обмена данными; ctNonBlocking— асинхронная передача (отправка/приём данных может производиться при помощи событийOnReadиOnWrite) |
Основные методы компонента TClientSocket | |
Open |
Открывает сокет (присвоение свойству Active значения True) |
Close |
Закрывает сокет (присвоение свойству Active значения False) |
Основные события компонента TClientSocket | |
OnConnect |
Возникает при установке подключения. В обработчике уже можно приступать к авторизации или отправке/приему данных |
OnConnecting |
Также возникает при подключении. Отличается от OnConnect тем, что подключение еще не установлено. Чаще всего используется, например, чтобы обновить статус |
OnDisconnect |
Событие возникает при закрытии сокета вашей программой, удаленным компьютером или из-за сбоя |
OnError |
Событие возникает при ошибке. Во время открытия сокета это событие не поможет выловить ошибку. Во избежание появления сообщения от Windows об ошибке, лучше позаботиться о внутренней обработке исключений путём помещения операторов открытия в блок «try..except» |
OnLookup |
Событие возникает при попытке получить IP-адрес от DNS |
OnRead |
Событие возникает при отправке вам каких-либо данных удалённым компьютером. При вызове OnRead возможна обработка принятых данных |
OnWrite |
Событие возникает, когда вашей программе разрешено писать данные в сокет |