Главная страница
    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.019 c
3-19463
Mic_2000
2003-03-19 12:07
2003.04.07
Триггеры и обновление базы


3-19492
Ej
2003-03-19 20:09
2003.04.07
SQL в консольном приложении


1-19634
val_123
2003-03-25 16:14
2003.04.07
Несбрасываемый счётчик


1-19578
Юлия
2003-03-27 10:44
2003.04.07
длинные слова в отчете


3-19486
Юрий Зотов
2003-03-19 13:49
2003.04.07
Шахматки





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский