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

Для приема или отправки данных необходимо использовать методы объекта tClientSocket.Socket:

  • SendBuf(var Buf; Count: Integer) - Посылка буфера через сокет. Буфером может являться любой тип, будь то структура (record), либо простой Integer. Буфер указывается параметром Buf, вторым параметром Вы должны указать размер пересылаемых данных в байтах (Count);

  • SendText(const S: string)- Посылка текстовой строки через сокет.

  • SendStream(AStream: TStream)- Посылка содержимого указанного потока через сокет. Пересылаемый поток должен быть открыт. Поток может быть любого типа - файловый, из ОЗУ, и т.д.

  • ReceiveBuf (var Buf; Count: Integer)- Прием данных в буферBuf, размеромCount. Важно знать, что при попытке чтения большего количества данных чем доступно на данный момент – возникнет ошибка чтения с сокета. Количество данных (в байтах), доступных для чтения с сокета, можно узнать в свойствеReceiveLength.

Для чтения простых данных с сокета можно воспользоваться свойством ReceiveText.

Работа с серверными сокетами (tServerSocket)

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

Основные этапы работы с tServerSocket

1) Определение свойств Port и ServerType - чтобы к серверу могли нормально подключаться клиенты, нужно, чтобы порт, используемый сервером точно совпадал с портом, используемым клиентом (и наоборот). СвойствоServerTypeопределяет тип подключения (подробнее см.ниже);

2) Открытие сокета- открытие сокета и указанного порта. Здесь выполняется автоматическое начало ожидания подсоединения клиентов (Listen);

3) Подключение клиента и обмен данными с ним- здесь подключается клиент и идет обмен данными с ним.

4) Отключение клиента- Здесь клиент отключается и закрывается его сокетное соединение с сервером.

5) Закрытие сервера и сокета- По команде администратора сервер завершает свою работу, закрывая все открытые сокетные каналы и прекращая ожидание подключений клиентов.

Следует заметить, что пункты 3-4 повторяются многократно, т.е. эти пункты выполняются для каждого нового подключения клиента.

Основные свойства компонента TServerSocket

Socket

Класс TServerWinSocket, через который Вы имеете доступ к открытым сокетным каналам. Далее мы рассмотрим это свойство более подробно, т.к. оно, собственно и есть одно из главных.

ServerType

Тип сервера. Может принимать одно из двух значений: stNonBlocking- синхронная работа с клиентскими сокетами. При таком типе сервера Вы можете работать с клиентами через событияOnClientReadиOnClientWrite.stThreadBlocking- асинхронный тип. Для каждого клиентского сокетного канала создается отдельный процесс (Thread).

ThreadCacheSize

Количество клиентских процессов (Thread), которые будут кэшироваться сервером. Здесь необходимо подбирать среднее значение в зависимости от загруженности Вашего сервера. Кэширование происходит для того, чтобы не создавать каждый раз отдельный процесс и не убивать закрытый сокет, а оставить их для дальнейшего использования.

Active

Показатель того, активен в данных момент сервер, или нет. Т.е., фактически, значение True указывает на то, что сервер работает и готов к приему клиентов, а False- сервер выключен. Чтобы запустить сервер, нужно просто присвоить этому свойству значениеTrue.

Port

Номер порта для установления соединений с клиентами. Порт у сервера и у клиентов должны быть одинаковыми. Рекомендуются значения от 1025 до 65535, т.к. от 1 до 1024 - могут быть заняты системой.

Основные методы компонента TServerSocket

Open

Запускает сервер. По сути, эта команда идентична присвоению значения TrueсвойствуActive

Close

Останавливает сервер. По сути, эта команда идентична присвоению значения FalseсвойствуActive

Основные события компонента TServerSocket

OnClientConnect

Возникает, когда клиент установил сокетное соединение и ждет ответа сервера (OnAccept)

OnClientDisconnect

Возникает, когда клиент отсоединился от сокетного канала

OnClientRead

Возникает, когда клиент передал серверу какие-либо данные. Доступ к этим данным можно получить через передаваемый параметр Socket: TCustomWinSocket

OnClientWrite

Возникает, когда сервер может отправлять данные клиенту по сокету

OnGetSocket

В обработчике этого события Вы можете отредактировать параметр ClientSocket

OnGetThread

В обработчике этого события Вы можете определить уникальный процесс (Thread) для каждого отдельного клиентского канала, присвоив параметру SocketThread нужную подзадачу TServerClientThread

OnThreadStart

Возникает, когда подзадача (процесс, Thread) запускается

OnThreadEnd

Возникает, когда подзадача (процесс, Thread) останавливается

OnAccept

Возникает, когда сервер принимает клиента или отказывает ему в соединении

OnListen

Возникает, когда сервер переходит в режим ожидания подсоединения клиентов