Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Использование TClientSocket и TServerSocket

2.1K
17 декабря 2002 года
And
7 / / 11.10.2002
Есть сервер (на TServerSocket) и клиент (на TClientSocket).
Клиентов может быть несколько (10-20) и все они конектятся к одному серверу и передают блоки данных размером 1-5 Kb, а сервер должен ответить на каждый полученный блок данных принят или нет. Вопрос такой, как грамотно реализовать прием сообщений на сервере в обработчике события OnClientRead? Может ли сложиться такая ситуация, что в определенный момент блок данных приходит не целиком, а лишь его часть и что при этом делать, как собирать эти куски, если учесть что данные приходят от разных клиентов? Что делать в том случае, если приходит очередной блок данных в то время когда в обработчике события OnClientRead идет обработка предыдущего блока данных ?
Вообщем вопрос один, как все это организовать? Может в этой ситуации нужно использовать ServerType=stThreadBlocking и для каждого клиента создавать свой процесс?
2.5K
22 января 2003 года
olebon
12 / / 22.01.2003
Цитата:
Originally posted by And
Есть сервер (на TServerSocket) и клиент (на TClientSocket).
Клиентов может быть несколько (10-20) и все они конектятся к одному серверу и передают блоки данных размером 1-5 Kb, а сервер должен ответить на каждый полученный блок данных принят или нет. Вопрос такой, как грамотно реализовать прием сообщений на сервере в обработчике события OnClientRead? Может ли сложиться такая ситуация, что в определенный момент блок данных приходит не целиком, а лишь его часть и что при этом делать, как собирать эти куски, если учесть что данные приходят от разных клиентов? Что делать в том случае, если приходит очередной блок данных в то время когда в обработчике события OnClientRead идет обработка предыдущего блока данных ?
Вообщем вопрос один, как все это организовать? Может в этой ситуации нужно использовать ServerType=stThreadBlocking и для каждого клиента создавать свой процесс?

2.5K
22 января 2003 года
olebon
12 / / 22.01.2003
если будешь грамотно использовать эти два компонента - все должно работать. у меня по-крайней мере после некоторых доработок все идет. а кусок данных размером больше 2кб вроде как в один пакет вместиться не сможет (это можно посмотреть по описанию формата пакета ethernet). поэтому применяй SendBuf(array,size) (к примеру ClientSocket1->Socket->SendBuf(zapros,5);) и на приемной стороне соответственно: Socket->ReceiveBuf(priem,SIZE); данные не вместившиеся в один пакет просто можно собрать на др. стороне. ну и чтобы все это хозяйство работало "как бы" одновременно со всеми (20) клиентами используй многопоточность. вроде все :)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог