Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Рисунок через сокет


Страницы:   1 2 3 4

Romm ©   (2007-04-15 11:30:00) 

******************************************************************************** **********************************
Я как-то говорил о этой проблеме, но решил повториться, т.к. мне никто не дал вразумительного ответа.
Подскажите пожалуйста как с сервера передать клиенту снимок рабочего стола, не сохраняя его на харде?
Спасиб


Сергей М.   (2007-04-17 15:49:00) [21]

Если исключение не схлопотал, значит можно)
А по идее ты должен был его схлопотать)


Romm   (2007-04-17 15:48:00) [22]

я думаю, что можно, но не очень-то уверен :)


Сергей М.   (2007-04-17 15:46:00) [23]


> так вообще делать можно?


А сам-то как думаешь ?


Romm   (2007-04-17 15:43:00) [24]

Тьфу, а походу перегрелся:
я прогу тестирую на 1 компе. сервер и клиент на одной машине. Ясно, что если у меня форма на весь экран - она себя и отображает... вух, буду надеяться, что работает...


Romm   (2007-04-17 15:40:00) [25]


> Сергей М. ©   (17.04.07 15:36) [44]

да не, все ок. ошибка пошла пить чай. Только на форме графика не отображается...
VidioForm.Canvas.Assign(Bitmap);
так вообще делать можно? :) или лучше TImage на всю форму растянуть?


Сергей М.   (2007-04-17 15:36:00) [26]


> как же так?


Что"как же так" ?

Что тебя смущает в этой строчке ?


Romm   (2007-04-17 15:34:00) [27]


> Сергей М. ©   (17.04.07 15:32) [41]


> Рамиль ©   (17.04.07 15:32) [40]

ок, я просто не понял с лету :)


Romm   (2007-04-17 15:33:00) [28]


> Stream := TMemoryStream.Create;

как же так?


Сергей М.   (2007-04-17 15:32:00) [29]


> это опять на Stream поменять тип?


Причем здесь тип ?

Сейчас эта переменная у тебя локальная, время ее жизни равно времени  работы метода, в котором она объявлена. А тебе надо чтобы эта переменная была жива по кр.мере все то время, пока жив объект TMemoryStream, на который ссылается значение этой переменной. Для этого как раз и подходят статические переменные, потому что время их жизни равно времени работы приложения.


Рамиль   (2007-04-17 15:32:00) [30]


> Romm ©   (17.04.07 15:27) [39]

Это дфмки от моего рабочего примера.

А так Сергей прав, скорее всего в разрушенный/несозданный Stream пытаешься писать.


Romm   (2007-04-17 15:27:00) [31]


> статической

это опять на Stream поменять тип?
> А подумать?

просто я, извени, ничего полезного от туда не узнал :) А может просто плохо прочитал :)


Сергей М.   (2007-04-17 15:23:00) [32]


> Stream.Write(Buf, RecivedSize); // компилятор тут останавливается!


Компилятор никогда не останавливается - он делает свою работу до конца)

А по сабжу - сделай переменную Stream статической.


Рамиль   (2007-04-17 15:23:00) [33]

А подумать?


Romm   (2007-04-17 15:21:00) [34]


> Рамиль ©   (17.04.07 15:12) [34]

а это что такое? :)


Romm   (2007-04-17 15:12:00) [35]

procedure TMainForm.ClientSocket1Read(Sender: TObject;
Socket: TCustomWinSocket);
var
Buf: array[0..8191] of byte;
RecivedSize: integer;
Size: int64;
AllSize: int64;
Stream: TMemoryStream;
Bitmap:TBitmap;
begin
if not Reciveing then
  begin
    TClientSocket(Sender).Socket.ReceiveBuf(Size, SizeOf(Size));
    Reciveing := true;
    Stream := TMemoryStream.Create;
    AllSize := 0;
  end
else
  begin
    RecivedSize := TClientSocket(sender).Socket.ReceiveBuf(Buf, SizeOf(Buf));
    Stream.Write(Buf, RecivedSize);// компилятор тут останавливается!
    inc(AllSize, RecivedSize);
    if AllSize = Size then
      begin
        Reciveing := false;
        Bitmap:=TBitmap.Create;
        Stream.Position := 0;
        Bitmap.LoadFromStream(Stream);
        Stream.Free;
        VidioForm.Canvas.Assign(Bitmap);
        Bitmap.Free;
      end;
  end;
end;


Рамиль   (2007-04-17 15:12:00) [36]

object Form1: TForm1
 Left = 582
 Top = 308
 Width = 276
 Height = 125
 Caption = 'Form1'
 Color = clBtnFace
 Font.Charset = DEFAULT_CHARSET
 Font.Color = clWindowText
 Font.Height = -11
 Font.Name = 'MS Sans Serif'
 Font.Style = []
 OldCreateOrder = False
 PixelsPerInch = 96
 TextHeight = 13
 object ServerSocket: TServerSocket
   Active = True
   Port = 4050
   ServerType = stNonBlocking
   OnClientRead = ServerSocketClientRead
   Left = 16
   Top = 8
 end
end

object Form2: TForm2
 Left = 274
 Top = 204
 Width = 761
 Height = 601
 Caption = 'Form2'
 Color = clBtnFace
 Font.Charset = DEFAULT_CHARSET
 Font.Color = clWindowText
 Font.Height = -11
 Font.Name = 'MS Sans Serif'
 Font.Style = []
 OldCreateOrder = False
 PixelsPerInch = 96
 TextHeight = 13
 object Image: TImage
   Left = 8
   Top = 32
   Width = 713
   Height = 513
   Stretch = True
 end
 object Button3: TButton
   Left = 152
   Top = 0
   Width = 75
   Height = 25
   Caption = 'Recive'
   TabOrder = 0
   OnClick = Button3Click
 end
 object Button1: TButton
   Left = 56
   Top = 0
   Width = 75
   Height = 25
   Caption = 'Connect'
   TabOrder = 1
   OnClick = Button1Click
 end
 object Button2: TButton
   Left = 264
   Top = 0
   Width = 75
   Height = 25
   Caption = 'Disconnect'
   TabOrder = 2
   OnClick = Button2Click
 end
 object ClientSocket: TClientSocket
   Active = False
   ClientType = ctNonBlocking
   Host = '127.0.0.1'
   Port = 4050
   OnRead = ClientSocketRead
   Left = 16
   Top = 8
 end
end


Сергей М.   (2007-04-17 15:04:00) [37]


> Romm ©   (17.04.07 15:02) [32]


см. меню Search -> Find Error ..


Romm   (2007-04-17 15:02:00) [38]

О, боже! Теперь клиент не работает :(( щас с ума сойду :)

Access violation at address 004798C3 in module 'Client.exe'. Read of address 7836663


Сергей М.   (2007-04-17 14:59:00) [39]


> просто я с сокетом (и вобще с сетью) не работал и не знаю
> как он функционирует


А причем здесь сокеты ?

Если некий метод некоего объекта требует в кач-ве параметра некий объект-наследник класса TStream, то можно ли подсунуть этому методу некий объект, НЕ являющийся таковым ?

Подумай)


Steep   (2007-04-17 14:56:00) [40]

нет я подумал что можно, просто я с сокетом (и вобще с сетью) не работал и не знаю как он функционирует :(


Страницы:   1 2 3 4

Наверх

Титульная страница Поиск, карта сайта Написать письмо