Использование TClientSocket и TServerSocket
Клиентов может быть несколько (10-20) и все они конектятся к одному серверу и передают блоки данных размером 1-5 Kb, а сервер должен ответить на каждый полученный блок данных принят или нет. Вопрос такой, как грамотно реализовать прием сообщений на сервере в обработчике события OnClientRead? Может ли сложиться такая ситуация, что в определенный момент блок данных приходит не целиком, а лишь его часть и что при этом делать, как собирать эти куски, если учесть что данные приходят от разных клиентов? Что делать в том случае, если приходит очередной блок данных в то время когда в обработчике события OnClientRead идет обработка предыдущего блока данных ?
Вообщем вопрос один, как все это организовать? Может в этой ситуации нужно использовать ServerType=stThreadBlocking и для каждого клиента создавать свой процесс?
Цитата:
Originally posted by And
Есть сервер (на TServerSocket) и клиент (на TClientSocket).
Клиентов может быть несколько (10-20) и все они конектятся к одному серверу и передают блоки данных размером 1-5 Kb, а сервер должен ответить на каждый полученный блок данных принят или нет. Вопрос такой, как грамотно реализовать прием сообщений на сервере в обработчике события OnClientRead? Может ли сложиться такая ситуация, что в определенный момент блок данных приходит не целиком, а лишь его часть и что при этом делать, как собирать эти куски, если учесть что данные приходят от разных клиентов? Что делать в том случае, если приходит очередной блок данных в то время когда в обработчике события OnClientRead идет обработка предыдущего блока данных ?
Вообщем вопрос один, как все это организовать? Может в этой ситуации нужно использовать ServerType=stThreadBlocking и для каждого клиента создавать свой процесс?
Есть сервер (на TServerSocket) и клиент (на TClientSocket).
Клиентов может быть несколько (10-20) и все они конектятся к одному серверу и передают блоки данных размером 1-5 Kb, а сервер должен ответить на каждый полученный блок данных принят или нет. Вопрос такой, как грамотно реализовать прием сообщений на сервере в обработчике события OnClientRead? Может ли сложиться такая ситуация, что в определенный момент блок данных приходит не целиком, а лишь его часть и что при этом делать, как собирать эти куски, если учесть что данные приходят от разных клиентов? Что делать в том случае, если приходит очередной блок данных в то время когда в обработчике события OnClientRead идет обработка предыдущего блока данных ?
Вообщем вопрос один, как все это организовать? Может в этой ситуации нужно использовать ServerType=stThreadBlocking и для каждого клиента создавать свой процесс?
если будешь грамотно использовать эти два компонента - все должно работать. у меня по-крайней мере после некоторых доработок все идет. а кусок данных размером больше 2кб вроде как в один пакет вместиться не сможет (это можно посмотреть по описанию формата пакета ethernet). поэтому применяй SendBuf(array,size) (к примеру ClientSocket1->Socket->SendBuf(zapros,5);) и на приемной стороне соответственно: Socket->ReceiveBuf(priem,SIZE); данные не вместившиеся в один пакет просто можно собрать на др. стороне. ну и чтобы все это хозяйство работало "как бы" одновременно со всеми (20) клиентами используй многопоточность. вроде все :)