Главная страница
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.02 c
1-17033
AFrolov
2003-02-25 11:03
2003.03.06
Com Server Warning


1-17034
Ash
2003-02-25 10:18
2003.03.06
формируем буфер


6-17230
smok_er
2003-01-17 13:11
2003.03.06
Access Violation: проблемы с HttpQueryInfo


14-17305
Мледенец
2003-02-18 13:11
2003.03.06
Помогите новичку FireBird


14-17334
saff
2003-02-17 20:17
2003.03.06
как подписать ActiveX