Поиск:

Ответ в темуСоздание новой темы Создание опроса
> TServevSocket TClientSocket, Проблемма с отправкой клиенту 
:(
    Опции темы
ezekil
Дата 14.5.2012, 19:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 24.4.2012

Репутация: нет
Всего: нет



Люд помогите пожалуйста! Почемуто не работает отправка на клиент...
сервер клиент - оба в режиме ctBlocking (т.к. потоки)
Код

//на сервере в баттоне
int cmd;
cmd=2;
Form2->ServerSocket1->Socket->Connections[0]->SendBuf(&cmd,sizeof(cmd));

// на клиенте
int SizeBaf;
SizeBaf=ClientSocket1->Socket->ReceiveLength();
if (SizeBaf!=0) {
ClientSocket1->Socket->ReceiveBuf(&cmd,sizeof(cmd));
switch(cmd){
    case 2:
       {
       ShowMessage("111");
       break;
       }

когда нажимаю на кнопку... сервер зависает на SendBuf-e... и чегото ждет, на клинет ничего не приходит, но если потом с клиента чтото послать серверу... то сервер отвисает и "доотправляет"... на клиент приходит почемуто сначало ответ на запрос и только потом присылается cmd=2; 
PM MAIL   Вверх
SVN74
Дата 14.5.2012, 21:30 (ссылка) |   (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 5.5.2008
Где: Комсомольск на Дн епре

Репутация: 11
Всего: 18



Цитата(ezekil @  14.5.2012,  19:21 Найти цитируемый пост)
int SizeBaf;
SizeBaf=ClientSocket1->Socket->ReceiveLength();
if (SizeBaf!=0) {

В этом нет никакой необходимости...
PM MAIL WWW   Вверх
artsb
Дата 14.5.2012, 21:57 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 39
Всего: 64



ezekil, не забываем читать справку. Там же написано, что метод ReceiveLength() используется в асинхронном режиме работы.


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
ezekil
Дата 14.5.2012, 23:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 24.4.2012

Репутация: нет
Всего: нет



Цитата(artsb @ 14.5.2012,  21:57)
ezekil, не забываем читать справку. Там же написано, что метод ReceiveLength() используется в асинхронном режиме работы.

а как же тогда? у меня это в таймере.... создать поток? или есть другая функция какаято?
PM MAIL   Вверх
artsb
Дата 15.5.2012, 07:59 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 39
Всего: 64



Цитата(ezekil @  14.5.2012,  23:30 Найти цитируемый пост)
а как же тогда? у меня это в таймере.... создать поток? или есть другая функция какаято? 

Кстати, в справке так же написано, что метод ReceiveBuf() должен использоваться в асинхронном режиме работы.

В вашем случае нужно использовать TWinSocketStream. Конечно же, лучше создать отдельный поток для чтения данных.
Пример:
Код

TClientSocket *soc = new TClientSocket(NULL);
soc->ClientType = ctBlocking;
soc->Host = /* host */;
soc->Port = /* port */;
soc->Open();

if(CSoc->Active)
{
    unsigned char ucBuf[1024];
    int iReaded;
    TWinSocketStream *socStream = new TWinSocketStream(soc->Socket, 10000);
    
    while(/* условие */)
    {
        iReaded = socStream->Read((void *)ucBuf, sizeof(ucBuf));
        if(iReaded > 0)
        {
            // анализируем и обрабатываем полученные данные
        }
    }
    
    delete socStream;
    soc->Close();
}

delete soc;


Это сообщение отредактировал(а) artsb - 15.5.2012, 08:07


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
ezekil
Дата 15.5.2012, 09:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 24.4.2012

Репутация: нет
Всего: нет



Цитата(artsb @ 15.5.2012,  07:59)
Цитата(ezekil @  14.5.2012,  23:30 Найти цитируемый пост)
а как же тогда? у меня это в таймере.... создать поток? или есть другая функция какаято? 

Кстати, в справке так же написано, что метод ReceiveBuf() должен использоваться в асинхронном режиме работы.

В вашем случае нужно использовать TWinSocketStream. Конечно же, лучше создать отдельный поток для чтения данных.
Пример:
Код

TClientSocket *soc = new TClientSocket(NULL);
soc->ClientType = ctBlocking;
soc->Host = /* host */;
soc->Port = /* port */;
soc->Open();

if(CSoc->Active)
{
    unsigned char ucBuf[1024];
    int iReaded;
    TWinSocketStream *socStream = new TWinSocketStream(soc->Socket, 10000);
    
    while(/* условие */)
    {
        iReaded = socStream->Read((void *)ucBuf, sizeof(ucBuf));
        if(iReaded > 0)
        {
            // анализируем и обрабатываем полученные данные
        }
    }
    
    delete socStream;
    soc->Close();
}

delete soc;

Спасибо большое!  буду пытаться.... smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0882 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.