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

Вниз

Кто знает как?   Найти похожие ветки 

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

Наверх




Память: 0.46 MB
Время: 0.005 c
1-73271
no_login
2002-05-11 00:37
2002.05.23
Деловое предложение! Есть такой модуль... windows.pas...


1-73222
ДЖИН
2002-05-14 23:38
2002.05.23
Класс TStrings


7-73431
Sasha9
2002-02-23 14:28
2002.05.23
Как сделать чтобы приложение не закрылось и при этом не зависло, когда в win98 меняешь полбзователя(log off)


7-73428
skovorodka
2002-02-23 18:36
2002.05.23
Кто знает как промнамно изменять параметры Bios ? (или, если можно перепрошить)


14-73369
MBo
2002-04-15 18:29
2002.05.23
Небесполезные мелочи (в качестве обучения)





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