Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Работа с сокетами в Delphi.doc
Скачиваний:
88
Добавлен:
10.05.2015
Размер:
79.87 Кб
Скачать

Работа с сокетами в 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

Событие возникает, когда вашей программе разрешено писать данные в сокет