Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 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
1-73291
Riko
2002-05-11 17:13
2002.05.23
Командная строка...


1-73299
Dion
2002-05-11 21:03
2002.05.23
Помогите определить по таймеру настоящее время суток в программе


1-73139
VID
2002-05-05 18:20
2002.05.23
Определение состояния контексного меню (TPopup)


1-73260
Kopachev
2002-05-10 08:27
2002.05.23
Маленький вопрос про Canvas


3-73006
jonik pegas
2002-04-25 14:23
2002.05.23
Null в поле Integer





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