Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Программирование под Windows > C++ Builder
Перезагрузить страницу TMemoryStream и ServerSocket создание серверного потока
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
Viktor Viktor вне форума
Member
 
Сообщений: 26
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 02.12.2003
По умолчанию TMemoryStream и ServerSocket создание серверного потока - 12.12.2005, 04:51

Всем привет!
Проблема такая: При конекте юзера к серверу создается поток, заполняется, передаётся юзеру и юзер дисконектится. При следующем конекте, как только происходит обращение к потоку выдается ошибка... и вообще если после первой передачи обратится к потоку сразу ошибка! Как буддто ServerSocket как-то блокирует его...
Мож кто сталкивался с этим?
Код:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include <jpeg.hpp>
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "CSPIN"
#pragma resource "*.dfm"
TMemoryStream *pms = new TMemoryStream();
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}                                    
//---------------------------------------------------------------------------
void __fastcall TForm1::ServerAccept(TObject *Sender,
      TCustomWinSocket *Socket)
{
         TJPEGImage* jpg = new TJPEGImage;
         Graphics::TBitmap *Bitmap1 = new Graphics::TBitmap();

         try
                {
                 Bitmap1->Width = Screen->Width;
                 Bitmap1->Height = Screen->Height;
                 BitBlt(Bitmap1->Canvas->Handle, 0, 0, Screen->Width, Screen->Height, GetDC(0), 0, 0, SRCCOPY);
                 jpg->CompressionQuality=70;
                 jpg->Assign(Bitmap1);
                 jpg->SaveToStream(pms);
                 Bitmap1->Dormant();
                 Bitmap1->FreeImage();
                }
         __finally
                {
                 delete jpg;
                }
         delete Bitmap1;
         pms->Position=0;
         Server->Socket->Connections[0]->SendStream(pms);
         Server->Socket->Connections[0]->Disconnect(Server->Socket->Connections[0]->SocketHandle);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
delete pms;
}
//---------------------------------------------------------------------------
Ответить с цитированием
  (#2 (permalink)) Старый
Serega_Mexanik Serega_Mexanik вне форума
Member
 
Сообщений: 215
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
Регистрация: 12.12.2005
По умолчанию 12.12.2005, 06:08

попробуй все создать глобально...

Я про:
Код:
TJPEGImage* jpg = new TJPEGImage;
Graphics::TBitmap *Bitmap1 = new Graphics::TBitmap()
И еще
Ты же создаешь динамически...
Код:
TMemoryStream *pms = new TMemoryStream();
Тогда и удаляй как-то по другому, напр
Код:
delete pms;
pms=NULL;
Ответить с цитированием
  (#3 (permalink)) Старый
Viktor Viktor вне форума
Member
 
Сообщений: 26
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 02.12.2003
По умолчанию 13.12.2005, 01:51

Я же говорю при любом обращении к "pms" выдаётся ошибка! Я думаю тут что-то с ServerSocket'ом надо делать, т.к. после первой передачи этого потока с ним(pms) начинаются траблы((( С остальным всё в порядке!
Ответить с цитированием
  (#4 (permalink)) Старый
FataLL FataLL вне форума
Member
 
Аватар для FataLL
 
Сообщений: 1,783
Сказал(а) спасибо: 2
Поблагодарили 25 раз(а) в 25 сообщениях
Регистрация: 04.11.2004
По умолчанию 14.12.2005, 10:35

Все считают, что раз сделали SendStream, значит уже всё ушло куда-то... Это же такая же байда, как и чтение файла с диска. Надо всегда проверять на сколько считалось, считалось ли, а не ошибка ли, а не слишком ли мало считали... Короче, вот кое-что здесь очень хорошо разъясняется и реализуется. Может и не придется велосипед изобретать в очередной раз..
Ответить с цитированием
  (#5 (permalink)) Старый
Olegg Olegg вне форума
Member
 
Сообщений: 318
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 03.06.2004
По умолчанию 14.12.2005, 11:55

Самый простой вариант. Попробуйте ухудшить качество каритинки.
С
Код:
jpg->CompressionQuality=70;
На
Код:
jpg->CompressionQuality=10;
Ответить с цитированием
Ads.
  (#6 (permalink)) Старый
Olegg Olegg вне форума
Member
 
Сообщений: 318
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 03.06.2004
По умолчанию 14.12.2005, 12:02

И где
Код:
JPG->Compress();
Перед записью в поток надо каретку выставить в ноль
Код:
pms->Position=0;
Ответить с цитированием
Ads
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание основного потока Maksitron Программирование графики 0 24.05.2010 12:07
TMemoryStream vs Microsoft Word 095 Delphi 10 30.04.2010 18:46
Использование AfxBeginThread Создание Потока mcNosferatum Visual C++ 17 25.08.2009 16:06
Монтажник серверного и телекоммуникационного оборудования Recruter2008 Работа 0 02.10.2008 13:40
Создание потока без файла 0xEEd С/С++ 7 17.03.2006 16:05
Как использовать потоки, например TMemoryStream Wel C++ Builder 1 03.03.2006 17:51
ServerSocket, ClientSocket Dread_Warrior C++ Builder 15 15.02.2006 22:48
TJPEGImage и TMemoryStream Olegg Программирование графики 6 30.06.2004 18:48
Использование TMemoryStream для работы с файлами .bmp, .gif vicbat C++ Builder 1 05.04.2004 12:13
Написание клиент-серверного приложения Erik C++ Builder 2 23.10.2003 19:37
Создание отдельного потока для проведения в нем математических вычислений imported_Www Visual C++ 4 03.06.2003 11:28
Создание потока в С++ builder Anonymous C++ Builder 1 11.11.2002 12:21



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов