Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Сети > Ожидани пакета данных.


Автор: Mixasik 17.11.2006, 18:47
Допустим на ip xxx.xxx.xxx.xxx на порт xxxx был отправлен пакет данных с сервера. Но как  программа "клиент" узнает об этом. То есть "клиент" должен следить за портом и если на него что-нибудь пришло, получить эти данные с порта? 

p.s На какой панили в дельфи находится TClientSocket и TServerSocket? Никак не найду smile 

Автор: Snowy 17.11.2006, 18:53
Если программа ожидает входящее подключение, то в ней должен быть реализован функционал сервера.
Если она сама установила подключение, то определение прихода пакета зависит от реализации.
Практически во всех компонентах для этого существует событие. Например OnReceive

Добавлено @ 18:54 
Цитата(Mixasik @  17.11.2006,  18:47 Найти цитируемый пост)
На какой панили в дельфи находится TClientSocket и TServerSocket?
Ни на какой.
Их нужно включать вручную: http://vingrad.ru/DELPHI-DLP-001373

Автор: Matematik 17.11.2006, 18:56
Цитата(Mixasik @  17.11.2006,  18:47 Найти цитируемый пост)
как  программа "клиент" узнает об этом. То есть "клиент" должен следить за портом и если на него что-нибудь пришло, получить эти данные с порта? 

Да
Цитата(Mixasik @  17.11.2006,  18:47 Найти цитируемый пост)
На какой панили в дельфи находится TClientSocket и TServerSocket?

Начиная в D7 эти компоненты не устанавливаются автоматически. Файл dclsockets70.bpl надо устанавливать руками (находится в Delphi\Bin)
Component->Install Packeges-Add
укажи файл dclsockets70.bpl
После установки компоненты появятся на вкладке Internet

Автор: Mixasik 17.11.2006, 19:27
Цитата(Matematik @  17.11.2006,  18:56 Найти цитируемый пост)
Начиная в D7 эти компоненты не устанавливаются автоматически. Файл dclsockets70.bpl надо устанавливать руками (находится в Delphi\Bin)Component->Install Packeges-Addукажи файл dclsockets70.bplПосле установки компоненты появятся на вкладке Internet


Понятно, ато неуобно не в визуальном виде работать...
Цитата(Snowy @  17.11.2006,  18:53 Найти цитируемый пост)
Практически во всех компонентах для этого существует событие. Например OnReceive


А понятно какое событие использовать.

А возможно, чтобы данные приходящие порциями ожидали, когда они считаются оттуда, то есть как бы была очередь пакетов?(Я сам толком не понял, что спросил, в общем, чтобы данные оставались на порту, пока не обработался предыдущий пакет, такое возможно?)

Автор: Snowy 17.11.2006, 19:52
Нет. Это невозможно. Ибо информация в TCP/IP передаётся потоком, а не пакетами.
Сокет понятия не имеет, когда заканчивается предыдущий пакет, а когда начинается новый.
Это уже твоя задача - собирать данные, пока не накопится цельный "пакет".
Ибо "пакет" в данном случае понятие условное.
Это для тебя там могут быть пакеты, файлы, строки.
Для сокета это поток информации.
Его задача доставить. А что там - это уже твоя забота.

Автор: Mixasik 17.11.2006, 20:10
Цитата(Snowy @  17.11.2006,  19:52 Найти цитируемый пост)
Его задача доставить. А что там - это уже твоя забота.


Понятно, ну буду знать. Теперь попробую сокеты программировать)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)