Форум: "Сети";
Текущий архив: 2002.05.23;
Скачать: [xml.tar.bz2];
ВнизКто знает как? Найти похожие ветки
← →
Hecker (2002-02-09 01:10) [0]Кто знает как переслать по сети файл, причем размер его может варьироваться от 1кБ до 1Гб(можно более). Я сделал пересылку файлов, но только небольшого размера (использую стандартные компоненты NMStrm и NMStrmServ).
Код который я использую:
Обработчик для клиента:
var MyStream:TMemoryStream;
begin MyStream:=TMemoryStream.Create;
MyStream.LoadFromFile("c:\windows\рабочий стол\demo.txt"); NMStrm1.PostIt(MyStream);
MyStream.Free;
end;
Обработчик для сервера:
procedure TForm1.NMStrmServ1MSG(Sender: TComponent; const sFrom: String; strm: TStream);
var MyStream:TMemoryStream;
begin MyStream:=TMemoryStream.Create;
MyStream.CopyFrom(strm,NMStrmServ1.BytesTotal); MyStream.SaveToFile("c:\windows\рабочий стол\demo2.txt");
end;
Как решить проблему?
← →
Dimk (2002-02-09 02:01) [1]Я думаю можно читать файл кусками и пересылать их. Думаю что это должно сработать независимо от того какими компонентами пользоваться. Я пользовался для этого левой библиотекой ( набором компонентов ) созданной не мной но немного правленной. Она вся реализована на WINSOCK. Я, правда, не качал файлы размером в 1Гб - но какая разница? Если протокол TCP он сам будет заботиться о сохранности данных. Надо только передать имя файла на принимающую сторону - но это же не сложно.
← →
Hecker (2002-02-09 05:29) [2]Передавать файл кусками - это не то что я хотел, хотя тоже отличная мысль!
А нельзя ли отослать файл каким-нибудь потоком данных?
← →
MCi (2002-02-09 20:59) [3]Зачем же кусками-то передавать! :))
Можно попробывать это:
///////////////////////------------------
{ЭТО ДЛЯ ПРИЕМА ФАЙЛА}
procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
var
s, sl: string;
begin
s:= Socket.ReceiveText;
SetLength(sl, StrLen(PChar(s))+1);
StrLCopy(@sl[1], PChar(s), Length(sl)-1);
DataSize:= StrToInt(sl);
Data:= TFileStream.Create({имя файла},1);
Delete(s, 1, Length(sl));
Reciving:= true;
end;
try
Data.Write(s[1], length(s));
if Data.Size = DataSize then
begin
Data.Position:= 0;
Data.Free;
Socket.Close;
showmessage("Файл принят!");
end;
except
Data.Free;
end;
{---------------------}
{ЭТО ДЛЯ ОТПРАВКИ ФАЙЛА}
procedure TForm1.Button1Click(Sender: TObject);
begin
var
ms: TFileStream;
begin
ms:= TFileStream.Create({имя файла},0);
try
ms.Position:= 0;
ClientSocket1.Socket.SendText(IntToStr(ms.Size) + #0);
ClientSocket1.Socket.SendStream(ms);
except
ms.Free;
end;
end;
/////////////////------------------
Незнаю как насчет 1 гига, но 500 метров как-то скачивал/
← →
Dimk (2002-02-10 00:10) [4]Какое счастье что длина AnsiString может быть до 2Гб :o)
← →
avk (2002-02-17 15:28) [5]>MCi
у меня таким способом большие фыйлы слаьт не получаеться ...
http://delphi.mastak.ru/cgi-bin/forum.pllook=1&id=1013802661&n=4
вот
← →
Hecker (2002-02-18 04:17) [6]да у меня и маленькие файлы таким способом не шлёт! :(((
← →
Yr2 (2002-02-18 15:29) [7]а вы не потеряли символ вопроса (?) между forum.pl и look
в строке
http://delphi.mastak.ru/cgi-bin/forum.pllook=1&id=1013802661&n=4
← →
Hecker (2002-03-10 06:10) [8]Ничего не получается! Мне необходимо чтобы при получении файла, можно было ещё и болтать. Болтаю через компоненту TServerSocket и TClientSocket. Вторую компоненту на форме использовать нельзя, Делфа ругается. Кто-нить может объяснить, чего её надобно?
Страницы: 1 вся ветка
Форум: "Сети";
Текущий архив: 2002.05.23;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.013 c