Модераторы: feodorv
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> TTcpClient чтение данных, В BDS 2006 
:(
    Опции темы
OrpVrest
Дата 11.2.2007, 16:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Каким методом читать данные (в моем случае текст) пришедший с сервера в TTcpClient (Не TIdTCPClient). 

Отправляю я как TcpClient->Sendln("Text");

А вот как принимать?

Добавлено @ 16:14 
И еще, в BS6 через TSocketClient не отправляются пакеты, вернее отправляются, но все сразу при закрытии сокета, как сделать отправку по отдельности как Sendln в TTcpClient
PM MAIL   Вверх
OrpVrest
Дата 12.2.2007, 22:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Код

void SendForm::ReadMessages()
{
   try{
    while (true){
        MemoMessage->Lines->Add(TcpClient->Receiveln());
     }
  }
  catch (Exception &exception) {
    MemoMessage->Lines->Add("Error");
  }
}


При выполнении данной функции приложение зависает, хотя перед тем как зависнуть информация о подключении к серверу выводится. Как бороться с зависанием?
PM MAIL   Вверх
NamelessMan
Дата 12.5.2007, 22:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Советую переходить на indy
PM MAIL   Вверх
RatHat
Дата 13.5.2007, 00:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вождь индейцев
*


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

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



*на грани оффтопа:*
IPWorks тоже неплохие
--------------------
Ma a kis' hi ve'ist i wan'i na e'ho ho wan'i
PM MAIL   Вверх
SenkraD
Дата 15.5.2007, 12:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



OrpVrest,  попробуй добавить строчку
Код

void SendForm::ReadMessages()    
{    
   try{    
    while (true){    
        MemoMessage->Lines->Add(TcpClient->Receiveln());
        Application->ProcessMessages(); // Вот эту, чтобы прога оьрабытывала сообщения (событие)    
     }    
  }    
  catch (Exception &exception) {    
    MemoMessage->Lines->Add("Error");    
  }    
}



--------------------
 Имеющий язык - да не убоится спросить! 
user posted image
PM MAIL ICQ   Вверх
GremlinProg
Дата 15.5.2007, 14:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

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



тут нужно еще допольнительно выставить таймаут на прием сообщения, т.е. перед циклом выставить такую вот опцию сокета:
Код

DWORD TimeOut = 100;
setsockopt(m_Socket,SOL_SOCKET,SO_RCVTIMEO,&TimeOut,sizeof(TimeOut));

где m_Socket - сокет, который ты слушаешь, а TimeOut - максимальное время ожидания ответа(время в милисекундах)


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
AntonChik
Дата 24.5.2007, 07:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



объясните, пожалуйста, как обработчик ReadMessages() может нормально функционировать и не зацикливаться, если стоит  бесконечный (если я не ошибаюсь) цикл  
Код

while (true)
{
MemoMessage->Lines->Add(TcpClient->Receiveln());
}

или даже 

Код

 while (true)
{    
 MemoMessage->Lines->Add(TcpClient->Receiveln());
 Application->ProcessMessages();
}   

???
--------------------
"Человек притаился за деревом. За широким огромным деревом. Он выглядывал тихонько и прятался. Но его никто не преследовал." (с) Хорги 
PM MAIL   Вверх
SenkraD
Дата 24.5.2007, 09:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



AntonChik, цикл хоть и безконечныей, но Application->ProcessMessages() даёт приложению обрабатывать сообщения и события. Но ты прав такой подход, я считаю, приемлем только для того случая, когда постояно идут даные к примеру каждые 1-3 секунды в противном случае программа будет в подвишем состоянии. Поэтому я бы использовал асинхронный режим работы сокетов. И вообще если не ошибаюсь то у этого компонента есть событие OnReciveXXX, которое снимет зацыкливание.


--------------------
 Имеющий язык - да не убоится спросить! 
user posted image
PM MAIL ICQ   Вверх
AntonChik
Дата 25.5.2007, 06:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



не. ну а вообще чем не нравица считывание инфы по OnReceive в TTcpClient ???

--------------------
"Человек притаился за деревом. За широким огромным деревом. Он выглядывал тихонько и прятался. Но его никто не преследовал." (с) Хорги 
PM MAIL   Вверх
RatHat
Дата 25.5.2007, 14:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вождь индейцев
*


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

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



AntonChik, не, ну вообще можешь использовать, конечно.
Использовать компоненты или просто сокеты - это дело вкуса, удобства и потребностей...
Я,например, предпочитаю компоненты такого рода использовать как можно реже.
--------------------
Ma a kis' hi ve'ist i wan'i na e'ho ho wan'i
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Сети | Следующая тема »


 




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


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

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