Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Indy 10, Server -> Client 
:(
    Опции темы
CaLaT
Дата 15.4.2009, 08:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Передачу делаю так:
Код

 TransmiteFile = new TMemoryStream ();

 try
 {
  TransmiteFile->LoadFromFile(OpenDialog->FileName.c_str());
 }
 catch(...)
 {
  //...
 } 
 Client->Socket->SendBufferSize=TransmiteFile->Size;
 Client->Socket->WriteBufferOpen();
 Client->Socket->Write(TransmiteFile,TransmiteFile->Size,false);
 Client->Socket->WriteBufferClose();
 delete TransmiteFile;


До передачи организую отдельный поток, который должен считывать сколько передано, но...
TransmiteFile->Position всегда на конечном кол-во байт, (т.е =TransmiteFile->Size) а если Position в ручную обнулить перед передачей, то он всегда будет 0
Client->Socket->WriteBufferThreshhold  всегда = -1

Помогите пожалуйста! Может я что-то делаю не так, или не то?

Это сообщение отредактировал(а) CaLaT - 15.4.2009, 08:48
PM MAIL   Вверх
CaLaT
Дата 18.4.2009, 11:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Может попробовать разбивать Мэмористрим на небольшие части и отправлять их частями? сколько частей будет я знаю и знаю по сколько эти части...
Блин, чото это на изобретение велосипеда тянет... мож таки есть другие решения? ...мысли?


Это сообщение отредактировал(а) CaLaT - 18.4.2009, 11:05
PM MAIL   Вверх
artsb
Дата 18.4.2009, 21:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



хотя я и не профи в Indy...
Не совсем понял, почему вы отправляете файл именно так. Есть же метод WriteStream.
Но это в 8-ой версии. 10-я вроде как претерпела большие изменения. Так что может вы и правы.

Цитата(CaLaT @  18.4.2009,  11:05 Найти цитируемый пост)
Может попробовать разбивать Мэмористрим на небольшие части и отправлять их частями? сколько частей будет я знаю и знаю по сколько эти части...

Наверное, это единственный выход...


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


Эксперт
****


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

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



Цитата(CaLaT @  30.3.2009,  18:20 Найти цитируемый пост)
И вот только теперь я заметил что у объекта TIdTCPClient нет метода OnRead() или OnReceive(). Каким образом мне понять что сервер что-то засылает?

Это можно делать где угодно. Например, в Button1Click:
Код

idClient1->Connect();
idClient1->Write...;
idClient1->Read...;
idClient1->Disconnect();

Естественно, не забываем про try catch.

А событие OnWork наступает, когда происходит запись или чтение данных. AWorkMode показывает, что сейчас происходит (запись или чтение), а AWorkCount содержит количество переданных/прочитанных байт.

Событие OnBeginWork наступает перед записью/чтением. AWorkMode показывает, что сейчас происходит (запись или чтение), а AWorkCountMax в случае чтения, содержит количество байт, которые будут приниматься.


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


Новичок



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

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



Ох и замучался я с этой десяткой(

Цитата(artsb @  18.4.2009,  21:50 Найти цитируемый пост)
Не совсем понял, почему вы отправляете файл именно так. Есть же метод WriteStream.


Цитата(artsb @  18.4.2009,  22:15 Найти цитируемый пост)
Это можно делать где угодно. Например, в Button1Click:

код C++ Builder
idClient1->Connect();
idClient1->Write...;
idClient1->Read...;
idClient1->Disconnect();

Всё верно, но только не для 10ой инди( Её переработали(


Цитата(artsb @  18.4.2009,  22:15 Найти цитируемый пост)
А событие OnWork наступает, когда происходит запись или чтение данных. AWorkMode показывает, что сейчас происходит (запись или чтение), а AWorkCount содержит количество переданных/прочитанных байт.

Событие OnBeginWork наступает перед записью/чтением. AWorkMode показывает, что сейчас происходит (запись или чтение), а AWorkCountMax в случае чтения, содержит количество байт, которые будут приниматься. 

По описанию так и должно быть, но проблема с том, что событие ОнВорк() вообще не срабатывает. Я даже пытался его прораммно вызывать:
Код

Client->Socket->BeginWork(wmWrite, 0);
Client->Socket->DoWork(wmWrite,MForm->TransmiteFile->Size);
Client->Socket->Write(MForm->TransmiteFile,MForm->TransmiteFile->Size,false); //отправка
Сlient->Socket->EndWork(wmWrite);
//TransmiteFile - МемориСтрим

В это случаи функция ОнВорк Срабатывает, но вызывается единожды... Как только не пробовал(


PM MAIL   Вверх
artsb
Дата 21.4.2009, 00:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(CaLaT @  20.4.2009,  21:18 Найти цитируемый пост)
событие ОнВорк() вообще не срабатывает

Странно, у меня срабатывает...

ЗЫ видать 10-ка серьёзные изменения притерпела...


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

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

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

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

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


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

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


 




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


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

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