|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Категории: АстрономияБиология География Другие языки Интернет Информатика История Культура Литература Логика Математика Медицина Механика Охрана труда Педагогика Политика Право Психология Религия Риторика Социология Спорт Строительство Технология Транспорт Физика Философия Финансы Химия Экология Экономика Электроника |
Основные этапы работы с 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. Тут нелишним будет поставить обработчик исключения на случай неудавшегося соединения.
Отправка/прием данных.
4) Закрытие сокета. По завершению обмена данными нужно закрыть сокет, вызвав метод Close компонента TClientSocket или присвоив значение False свойству Active.
Для приема или отправки данных необходимо использовать методы объекта 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 повторяются многократно, т.е. эти пункты выполняются для каждого нового подключения клиента.
Пример работы сокетами
См. демонстрационные проекты в папках /lab1/tcp-ip-client/ и /lab1/tcp-ip-server/ |