Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2007.11.04;
Скачать: [xml.tar.bz2];

Вниз

Файл через сокет   Найти похожие ветки 

 
paradox01   (2007-02-27 12:08) [0]

Как можно передать файлы через Socket.


 
Сергей М. ©   (2007-02-27 12:21) [1]

Обычным образом - прочитать содержимое файла (хоть целиком, хоть в цикле "кусками") в временный буфер и передать содержимое буфера.


 
paradox01   (2007-02-27 13:52) [2]


> Обычным образом - прочитать содержимое файла (хоть целиком,
>  хоть в цикле "кусками") в временный буфер и передать содержимое
> буфера.
<Можешь скинуть мне на мыло текст блока которое реализует это? А то я новичок в этом деле. Буду благодарен…/I>


 
hero ©   (2007-02-27 14:07) [3]

для меня удобней так:

var
 Form1: TForm1;
 Stream :Tfilestream;  
 size:integer;  
implementation
файл стрим и на серваке и на клиенте

создаешь стрим  когда Opendialog1.execute в клиенте
stream := tfilestream.create(имя файла, fmOpenRead) ...помойму так.....

передаем по сокету имя файла и Stream.size и ждем письма от сервака

когда сервак получил команду о файле и о данных(имя, размер)
создаем файлстрем так
Stream :=TFileStream.create(путь\имя файла, fmcreate);
запоминаем размер в переменной size
и сообщаем клиенту что готовы принять порцию

после того как клиент получил от сервака на назрешение передачи
передаем
var buf:array[1..2048] of char; или of byte безразницы ... хотяя ... разница е. но я пишу of char
   r:integer
begin
r:= stream.Read(buf,2048);
if r > 0 then
Socket.sendbuffer(buf,r)
else sream.free;

на серваке
получаем
var r:integer;
buf:array[1..2048] of char;
begin
r:=Socket.ReceiveBuf(buf,2048);
if (r > 0) or (stream.size < size) then
begin
 stream.write(buf,r);
 говорим что опять готовы принять порцию
end
else stream.frem //файл принят

вобчем переменная size не обязательно и or (stream.size < size) тоже
но если вы хотите прогрессбар тады обязательно где max = size a pos =stream.size
ну вобчем суть должна быть понятна


 
paradox01   (2007-02-28 08:48) [4]

Скиньте плиз исходник программы или процедуру, которая отправляет файл и процедуру, которая принимает файл.


 
Сергей М. ©   (2007-02-28 10:39) [5]


> paradox01   (28.02.07 08:48) [4]


Чем [3] не устраивает ?


 
DiamondShark ©   (2007-02-28 12:37) [6]


> Чем [3] не устраивает ?

чем, чем...
не компилится если скопипастить.


 
Сергей М. ©   (2007-02-28 13:38) [7]


> DiamondShark ©   (28.02.07 12:37) [6]


Да уж ... беда ...)


 
Rouse_ ©   (2007-02-28 14:50) [8]


> не компилится если скопипастить.

Китайский метод программирования еще ни к чему хорошему не приводил.
Сообщения о ошибках читаешь? Они же не просто-так тебе пишутся...


 
hero ©   (2007-03-02 12:18) [9]

написанное мной не весь исходник, в таком виде он только в целях изучения (можно сказать все разжевано) а если ты элементарной азбуки не знаеш то тебе браток рано еще за енто хвататься иди штудируй теорию


 
Сергей М. ©   (2007-03-02 15:33) [10]


> hero ©   (02.03.07 12:18) [9]


А ты хам, братец кролик)

Во-первых, [8] было заброшено не в твой огород.
Во-вторых, не надо уже про "элементарную азбуку" - про нее и тебе вовсе не грех вспомнить.


 
G_M_S   (2007-03-02 18:24) [11]

Передавать можно не кусками, передавать можно сразу весь файл. Контроль "дохождения" будет и без тебя выполнен на более низком уровне. При работе с TTcpServer надо создавать отдельный поток для каждого подключения - дело в шляпе: передаешь что-то типа "имя_файла@размер@", а на принимающей стороне проверяешь в OnRead: если размер и имя файла не проинициализированы - разбираешь буфер на предмет этой строчки, если инициализированы - пишешь в открытый при инициализации стрим. В OnDisconnect закрываешь стрим - и все дела.


 
Hero ©   (2007-03-03 06:45) [12]

> G_M_S   (02.03.07 18:24) [11]
Передавать можно не кусками


согласен
но почему-то при передачи больших файлов (свыше 20 мег. ) через юдп зависает

>Сергей М. ©   (02.03.07 15:33) [10]
А ты хам, братец кролик)


а я братец и не тебе писал.
а тому кто в моем разжеванном примере разобраться не смог

а на счет азбуки.. смотря что считать азбукой ...
а то мож и тебе бы не проч почитать...

а вообще я не хочу ни скем ссориться, если кого обидел простите.


 
Belorus ©   (2007-03-03 08:59) [13]

Называется "поговнились, и хватит".


 
G_M_S   (2007-03-03 09:39) [14]


> но почему-то при передачи больших файлов (свыше 20 мег.
> ) через юдп зависает


тут вообще, насколько я понял речь про TCP/IP шла (ну и про компоненты с ним работающие, ессно). Через UDP я филе не кидал, потому с такими глюками и не сталкивался. А так - есть софтина для корпоративного обновления антивируса (централизовано сливает апдейт для халявного антивиря) - с инета апдейт тащит через TClientSocket, проблем с файлами (основная антивирусная база - 7 Мб) небыло. Да и по локалке архивы раскидываются без проблем, причем достаточно крупные.



Страницы: 1 вся ветка

Форум: "Сети";
Текущий архив: 2007.11.04;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.065 c
2-1192290530
неугомонный
2007-10-13 19:48
2007.11.04
scroll у гридров


4-1177745646
AlexPH
2007-04-28 11:34
2007.11.04
Как получить доступ к удаленному реестру


2-1191952011
SveTTT
2007-10-09 21:46
2007.11.04
Коды кнопок


2-1192091776
AIK
2007-10-11 12:36
2007.11.04
Загрузить файл с помощью перетаскивания его курсором


15-1191599936
Leonid Troyanovsky
2007-10-05 19:58
2007.11.04
Whois





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