Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 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.007 c
7-19883
Ruf
2003-02-12 12:45
2003.04.07
hotkey


4-19917
Cosmic
2003-02-07 18:56
2003.04.07
Ловушка на создание окна


3-19423
Денис
2003-03-18 10:54
2003.04.07
Ошибка


14-19762
Barman
2003-03-22 14:53
2003.04.07
Проблема с RXLib.


14-19796
Дмитрий К.К.
2003-03-19 09:49
2003.04.07
MS Outlook Express 5.50





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский