Модераторы: Snowy, Poseidon, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сокеты. Ошибка при приеме картинки, Вернее при Jpeg.loadFromStream() 
V
    Опции темы
Misha_White
Дата 19.5.2007, 09:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Проблема непонятная, но может кто встречался с таким... Я уже не могу ниче понять...
Отправляю с клиента картинку каждые n сек... Первый раз принимается и отображается, а второй раз ругается при попытке загрузить Image из Стрима...
Сервер:
Код

procedure SendDisp;
Var Error:integer;
    DispSize:integer;
  //  DispStream:TMemoryStream;
begin
 DispStream:=TMemoryStream.Create;
 JpegIm.SaveToStream(DispStream);
 DispStream.Seek(0,soFromBeginning);
  DispSize:=DispStream.Size;
 if vSocket<>Socket_Error then
  begin
   Error:=Send(vSocket,DispSize,SizeOf(DispSize),0);
   
   Error:=Send(vSocket,DispStream.Memory^,DispSize,0);
   DispStream.Destroy;
   JpegIm.Destroy;
   if Error=Socket_Error then
    Begin
      ServerForm.Timer1.Enabled:=False;
     MessageDlg('Ошибка при передаче данных!',mtWarning,[mbOk],0);

    end;
  end
 else
  MessageDlg('Ошибка при передаче данных! Socket_Error',mtWarning,[mbOk],0);
end;


Клиент:
Код

procedure TClientForm.Socket_Proc_Read_Close(var Msg:TMessage);
Var err:integer;
    S:String;
begin
 if WSAGETSELECTEVENT(Msg.lParam) = FD_CLOSE then
  begin
   MessageDlg('Сервер закрыл соединение',mtInformation,[mbOk],0);
   ClientForm.Caption:='RemAdmin - Disconnected';
   ClientForm.Button1.Enabled:=true;
  end;

 if WSAGETSELECTEVENT(Msg.lParam) = FD_READ then
  begin
   if Reciv=false then
    begin
     Err:=recv(cSocket,DispSize,SizeOf(DispSize),0);
      If Err=Socket_Error then
        MessageBox(NULL,'Ошибка при получении!','Error',MB_OK)
      else
       begin
        reciv:=true;
         MyStream:=TMemoryStream.Create;
        JpegIm:=TJPEGImage.Create;
       end;
    end
   else
    begin
       SetLength(s,17520);
       err:= recv(cSocket,S[1],17520,0);
        If Err=Socket_Error then
         begin
          MessageBox(NULL,'Ошибка при получении!','Error',MB_OK);
          exit;
         end;
       MyStream.Write(S[1],err);
    if DispSize=MyStream.Size then
     begin
       MyStream.Position:=0; //Seek(0,soFromBeginning);
        JpegIm.LoadFromStream(MyStream);// Здесь ругаемся...
         Image1.Canvas.Draw(0,0,JpegIm);
        MyStream.Destroy;
        JpegIm.Destroy;
      Reciv:=false;
     end;
    end;
  end;

end;

Может поможет кто-нибудь
Запускал на двух разных машинах, там на третий раз ругается...
--------------------
Я не волшебник... я только учусь...  
PM MAIL ICQ Skype   Вверх
Misha_White
Дата 19.5.2007, 13:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Обнаружил, что если ошибка появляется при третьем приеме, то ошибка возникает при попытке создать стрим...
--------------------
Я не волшебник... я только учусь...  
PM MAIL ICQ Skype   Вверх
MetalFan
Дата 19.5.2007, 14:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

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



по приведенным кускам кода можно сказать только то, что кривовато они написаны. всё.

Это сообщение отредактировал(а) MetalFan - 19.5.2007, 14:49


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
Misha_White
Дата 20.5.2007, 05:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



MetalFan, 

Цитата(MetalFan @  19.5.2007,  21:49 Найти цитируемый пост)
кривовато они написаны

В каком месте?

--------------------
Я не волшебник... я только учусь...  
PM MAIL ICQ Skype   Вверх
MetalFan
Дата 20.5.2007, 11:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

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



Цитата(Misha_White @  19.5.2007,  09:28 Найти цитируемый пост)
Отправляю с клиента картинку каждые n сек...


Цитата(Misha_White @  19.5.2007,  09:28 Найти цитируемый пост)
Сервер:

так что откуда отправляется? сначало написано, что с клиента, а код отправки указан, как "сервер".

откуда вызывается Socket_Proc_Read_Close...
откуда уверенность, что вызовы будут происходить в ожидаемой последовательности...

+ почему бы не использовать какой-нибудь Client/ServerSocket ?


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
Misha_White
Дата 20.5.2007, 12:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



MetalFan, 
Все... smile  С сервера отправляю...

Цитата(MetalFan @  20.5.2007,  18:22 Найти цитируемый пост)
откуда вызывается Socket_Proc_Read_Close...

Код

procedure Socket_Proc_Read_Close(var Msg:TMessage);message NETEVENT_MSG;

Если на данном сокете начнется передача данных от клиента, в главное окно приложения поступит сообщение NETEVENT_MSG.
Это же сообщение поступит при разрыве соединения

Цитата(MetalFan @  20.5.2007,  18:22 Найти цитируемый пост)
почему бы не использовать какой-нибудь Client/ServerSocket ? 

  smile Я пишу курсовую по Сетям... Сеть нужно ручками описывать...
--------------------
Я не волшебник... я только учусь...  
PM MAIL ICQ Skype   Вверх
aktuba
Дата 20.5.2007, 14:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Смышленный
***


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

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



Буквально недавно столкнулся с подобной проблемой. Три дня мучений ничего не дали. В итоге решил просто - поток создаю при создании формы и освобождаю при выгрузке формы...


--------------------
user posted image
PM MAIL WWW Skype   Вверх
Misha_White
Дата 20.5.2007, 16:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



aktuba, 
И что, работает?
А освобождаешь методом Free?
--------------------
Я не волшебник... я только учусь...  
PM MAIL ICQ Skype   Вверх
aktuba
Дата 21.5.2007, 08:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Смышленный
***


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

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



Цитата

И что, работает?
А освобождаешь методом Free? 


Да, работает =))). Освобождаю при завершении программы чере Free =)


--------------------
user posted image
PM MAIL WWW Skype   Вверх
Misha_White
Дата 21.5.2007, 14:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



aktuba, 
И правда работает... Только чистить надо Clear-ом...
--------------------
Я не волшебник... я только учусь...  
PM MAIL ICQ Skype   Вверх
aktuba
Дата 21.5.2007, 16:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Смышленный
***


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

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



Цитата

Только чистить надо Clear-ом... 


Так ты спрашивал как я освобождаю, а не чищу  smile 


--------------------
user posted image
PM MAIL WWW Skype   Вверх
Misha_White
Дата 22.5.2007, 02:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



aktuba, 
Ну я понял...
А че, Destroy не работает?
--------------------
Я не волшебник... я только учусь...  
PM MAIL ICQ Skype   Вверх
MetalFan
Дата 22.5.2007, 11:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

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



Цитата(Misha_White @  22.5.2007,  02:24 Найти цитируемый пост)
А че, Destroy не работает? 

а  это к чему?


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
aktuba
Дата 22.5.2007, 12:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Смышленный
***


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

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



Цитата

А че, Destroy не работает?


А вот вопрос: зачем тебе Destroy, если для этого есть Free? Да и вообще - лучше FreeAndNil...


--------------------
user posted image
PM MAIL WWW Skype   Вверх
Misha_White
Дата 22.5.2007, 13:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



MetalFan, А это есть у TMemoryStream 2 метода Free и Destroy... А какой использовать?

Добавлено через 13 минут и 51 секунду
aktuba, 
Ну вот я и спрашиваю, что лучше использовать...
--------------------
Я не волшебник... я только учусь...  
PM MAIL ICQ Skype   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

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

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

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

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

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


 




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


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

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