Форум: "Сети";
Текущий архив: 2003.03.06;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.009 c