Форум: "Сети";
Текущий архив: 2003.04.07;
Скачать: [xml.tar.bz2];
ВнизПерекачка Найти похожие ветки
← →
Vampire (2003-02-11 18:51) [0]Доброго времени суток.
Стоит следующая задача...
организовать копирование файлов по сети...
Можно конечно стандартными методами через Сокеты,
но система жрет много ресурсов, все тормозит и в конечно итоге файл свыше 4ех метров переписать удается примерно как 50 на 50%...
Есть ли способ более выгодного копирования файлов?
Например разбить файл на куски и какчать его потоки как-то слитно... Например как устроен ГэтРайт...
Буду благодарен любым советам и ссылкам...
← →
mrcat (2003-02-12 14:51) [1]Определитесь, что конкретно надо - докачивать "Например как устроен ГэтРайт...", или что?!
>> но система жрет много ресурсов, все тормозит
Чтобы не тормозило - закачивайте в отдельном "потоке"
>> в конечно итоге файл свыше 4ех метров переписать удается примерно как 50 на 50%...
Как это понимать? Не "докачивает" что-ли?
← →
Vampire (2003-02-14 05:29) [2]>> в конечно итоге файл свыше 4ех метров переписать удается примерно как 50 на 50%...
Как это понимать? Не "докачивает" что-ли?
т.е. вероятность перекачки файла полностью... до зависания компа...
Если ли где пример с объяснением на тему с отдельным потоком?
← →
imbicil (2003-02-14 07:20) [3]почитай http://www.pergolesi.demon.co.uk/prog/threads/ToC.html
Извини на русском пока нет, но я скоро закончу перевод этой книги.
← →
Vampire (2003-02-16 05:48) [4]Блин...нсть такой исходник...
Клиент:
unit client;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ScktComp, ExtCtrls, StdCtrls;
type
TForm1 = class(TForm)
ClientSocket1: TClientSocket;
Button1: TButton;
Edit1: TEdit;
Label1: TLabel;
Label2: TLabel;
Bevel1: TBevel;
Image1: TImage;
procedure Button1Click(Sender: TObject);
procedure ClientSocket1Connect(Sender: TObject;
Socket: TCustomWinSocket);
procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
private
{ Private declarations }
reciving: boolean;
datasize: integer;
data: tmemorystream;
public
{ Public declarations }
end;
var
Form1: TForm1;
dat: tmemorystream;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
begin
clientsocket1.Active:=true;
end;
procedure TForm1.ClientSocket1Connect(Sender: TObject;
Socket: TCustomWinSocket);
begin
socket.SendText("send");
end;
procedure TForm1.ClientSocket1Read(Sender: TObject;
Socket: TCustomWinSocket);
var s,sl: string;
begin
s:=socket.ReceiveText;
if not Reciving then
begin
SetLength(sl,strlen(pchar(s))+1);
strlcopy(@sl[1],pchar(s), length(sl)-1);
datasize:=strToint(sl);
data:=TMemoryStream.create;
delete(s,1,length(sl));
reciving:=true;
end;
try
data.write(s[1],length(s));
if data.size =datasize then
begin
dat:=tmemorystream.Create;
data.position:=0;
dat.LoadFromStream(data);
dat.SaveToFile("c:\999.mp3");
data.free;
reciving:=false;
socket.Close;
end;
except
data.free;
end;
end;
end.
Сервер:
unit client;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ScktComp, ExtCtrls, StdCtrls;
type
TForm1 = class(TForm)
ClientSocket1: TClientSocket;
Button1: TButton;
Edit1: TEdit;
Label1: TLabel;
Label2: TLabel;
Bevel1: TBevel;
Image1: TImage;
procedure Button1Click(Sender: TObject);
procedure ClientSocket1Connect(Sender: TObject;
Socket: TCustomWinSocket);
procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
private
{ Private declarations }
reciving: boolean;
datasize: integer;
data: tmemorystream;
public
{ Public declarations }
end;
var
Form1: TForm1;
dat: tmemorystream;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
begin
clientsocket1.Active:=true;
end;
procedure TForm1.ClientSocket1Connect(Sender: TObject;
Socket: TCustomWinSocket);
begin
socket.SendText("send");
end;
procedure TForm1.ClientSocket1Read(Sender: TObject;
Socket: TCustomWinSocket);
var s,sl: string;
begin
s:=socket.ReceiveText;
if not Reciving then
begin
SetLength(sl,strlen(pchar(s))+1);
strlcopy(@sl[1],pchar(s), length(sl)-1);
datasize:=strToint(sl);
data:=TMemoryStream.create;
delete(s,1,length(sl));
reciving:=true;
end;
try
data.write(s[1],length(s));
if data.size =datasize then
begin
dat:=tmemorystream.Create;
data.position:=0;
dat.LoadFromStream(data);
dat.SaveToFile("c:\999.mp3");
data.free;
reciving:=false;
socket.Close;
end;
except
data.free;
end;
end;
end.
------------------------------------
Подскажите что можно сделать, чтобы приложение не подвисало,
а типа как говорят пускать все в своем потоке...но это каждый знает...
может кто покажет именно текстом что и как можно изменить чтобы работало...и объяснялось наглядно...
Страницы: 1 вся ветка
Форум: "Сети";
Текущий архив: 2003.04.07;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.019 c