Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.03.06;
Скачать: CL | DM;

Вниз

Server и Client - помогите...   Найти похожие ветки 

 
BlackSun ©   (2003-01-09 17:04) [0]

НИже прилагаются исходники сервера и клиента. Там где косяки, отмечено звездочками...
Суть, послать скриншот по сети. Скриншо приходит, но косяки указаны ниже.
unit server_;

interface

var
Form1: TForm1;
DeskTopDC: HDc;
DeskTopCanvas: TCanvas;
DeskTopRect: TRect;
image1:TImage;
stream1:tmemorystream;
j:tjpegimage;

implementation

{$R *.DFM}
procedure sendshot(Socket: TCustomWinSocket);
begin
DeskTopDC := GetWindowDC(GetDeskTopWindow);
DeskTopCanvas := TCanvas.Create;
DeskTopCanvas.Handle := DeskTopDC;
DeskTopRect := Rect(0,0,Screen.Width,Screen.Height);
image1:=TImage.Create(nil);
image1.Width:=screen.width;
image1.height:=screen.height;
image1.canvas.CopyRect(DeskTopRect,DeskTopCanvas,DeskTopRect);
j:=TJPEGImage.create;
j.assign(image1.Picture.bitmap);
ReleaseDC(GetDeskTopWindow,DeskTopDC);
stream1:=TMemoryStream.Create;
j.SaveToStream(stream1);
stream1.position:=0;
**********************почему у меня работает только Connections[1], а не **********************Connections[0]? Как узнать, какой именно?
Form1.ServerSocket1.Socket.Connections[1].Sendtext(inttostr(stream1.size)+#0);
form1.ServerSocket1.Socket.Connections[1].SendStream(stream1);
image1.free;
desktopcanvas.free;
j.free;
**********здесь прога вылетает с ошибкой, при освобождении памяти stream1
stream1.free;
end;

procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
var i,x,y,code:integer;
s:string;
begin
s:=socket.receivetext;
if s = "send" then sendshot(socket);
end;

procedure TForm1.ServerSocket1ClientError(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
begin
errorcode:=0;
end;

end.
*******************************Клиент
unit client_;
implementation
uses scrr;
{$R *.DFM}
procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
clientsocket1.active:=true;
ClientSocket1.Open;
end;

procedure TForm1.SpeedButton3Click(Sender: TObject);
begin
scr.show;
clientsocket1.socket.sendtext("send");
end;

procedure TForm1.SpeedButton2Click(Sender: TObject);
begin
clientsocket1.close
end;

procedure TForm1.ClientSocket1Read(Sender: TObject;
Socket: TCustomWinSocket);
var
s,s1:string;
i:longint;
begin
label1.Caption:="Читаем";
s:=socket.receivetext;
if not rec then
begin
setlength(s1,strlen(pchar(s))+1);
strlcopy(@s1[1],pchar(s),length(s1)-1);
datasize:=strtoint(s1);
data1:=tmemorystream.create;
delete(s,1,length(s1));
rec:=true;
end;
data1.write(s[1],length(s));
if data1.size=datasize then
begin
data1.position:=0;
j:=tjpegimage.create;
j.loadfromstream(data1);
scr.image1.Height:=j.Height;
scr.image1.Width:=j.Width;
scr.image1.Canvas.Draw(0,0,j);
j.free;
rec:=false;
data1.free;
end;
label1.Caption:="Закончили чтение...";
end;

end.


 
Verg ©   (2003-01-09 17:23) [1]

Для начала:

> stream1.free;


Note: The Stream passed as a parameter to SendStream becomes “owned” by the windows socket object. The Windows socket object frees the stream when it is finished with it. Do not attempt to free the stream after it has been passed as a parameter.


 
Verg ©   (2003-01-09 17:32) [2]


> **********************почему у меня работает только Connections[1],
> а не **********************Connections[0]? Как узнать, какой
> именно?
> Form1.ServerSocket1.Socket.Connections[1].Sendtext(inttostr(stream1.size)+#0);
> form1.ServerSocket1.Socket.Connections[1].SendStream(stream1);


А не надо "узнавать". Тебе его явно передают в параметре процедуры SendShot и называется он Socket. Т.о.,

Socket.Sendtext(inttostr(stream1.size)+#0);
Socket.SendStream(stream1);


 
igorkuz ©   (2003-01-16 12:07) [3]

Нельзя освобождать пока не отправишь
Освобождай в OnWrite



Страницы: 1 вся ветка

Текущий архив: 2003.03.06;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.023 c
1-17115
AZ
2003-02-22 08:56
2003.03.06
Необходимость создания кистей и перьев


14-17383
rusdeejay
2003-02-17 21:57
2003.03.06
Необходим Специалист


14-17280
panov
2003-02-03 20:11
2003.03.06
Регистрация в Питере


1-17028
Андрусь
2003-02-24 19:40
2003.03.06
Как освободить память от dll-лек


1-17008
Nemo
2003-02-21 02:08
2003.03.06
Помогите, пожалуйста!