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

Вниз

Перекачка   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.013 c
1-19514
DimShi
2003-03-25 03:49
2003.04.07
Файлы


1-19679
любитель
2003-03-26 09:29
2003.04.07
Помогите разобраться с указателем на массив...


3-19480
Игорь С.
2003-03-19 16:28
2003.04.07
Использование IBDataSet


8-19706
kuzia
2002-12-28 14:12
2003.04.07
Создание .avi из содержымого экрана


7-19892
DDDeN
2003-02-12 18:27
2003.04.07
Logo Win2000