|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
30.11.2012, 17:05 | #21 |
Участник клуба
Регистрация: 12.09.2012
Сообщений: 1,030
|
теперь надо как-то это всё принять?
Что нужно программисту: Компьютер, Среда программирование, Воображение, Прямые руки, Мозги, Знания этой среды программирования.
Программист-это профессия, а программирование-это моё хобби. |
30.11.2012, 17:18 | #22 |
Участник клуба
Регистрация: 07.12.2011
Сообщений: 1,025
|
прими файл длинной 10 байт с содержимым 1234567890
согласно твоего протокола получится сообщение Fil101234567890 допустим я принимаю твое сообщение, но я не понимаю какой размер файла
Не стесняемся, плюсуем!
|
30.11.2012, 17:21 | #23 |
Участник клуба
Регистрация: 07.12.2011
Сообщений: 1,025
|
тыпытаешьсявсокетзасунутьэтопредлож ение - понятно?
Не стесняемся, плюсуем!
|
30.11.2012, 18:38 | #24 |
Участник клуба
Регистрация: 12.09.2012
Сообщений: 1,030
|
fil-это индикатор файла. Client и Server 3 у меня меточки. Принимают только определеный текст.
Что нужно программисту: Компьютер, Среда программирование, Воображение, Прямые руки, Мозги, Знания этой среды программирования.
Программист-это профессия, а программирование-это моё хобби. |
30.11.2012, 18:51 | #25 |
Участник клуба
Регистрация: 07.12.2011
Сообщений: 1,025
|
только щас увидел что у тебя 2 конекта
Client3.Socket.SendText('Fil'); Client2.Socket.SendStream(stream); можно и так конечно но нафега?
Не стесняемся, плюсуем!
|
30.11.2012, 18:55 | #26 | |
Участник клуба
Регистрация: 12.09.2012
Сообщений: 1,030
|
Цитата:
Кстати о деректории. Я вот сам нашел способ передачи деректории, но как это всё зациклить, ведь надо знать когда передался паток?
Что нужно программисту: Компьютер, Среда программирование, Воображение, Прямые руки, Мозги, Знания этой среды программирования.
Программист-это профессия, а программирование-это моё хобби. Последний раз редактировалось Stilet; 30.11.2012 в 20:54. |
|
30.11.2012, 20:04 | #27 |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,430
|
Брр, что за неправильная передача данных?
На отправителе открываете файл, читаете размер данных, имя файла, калькулируете CRC32. Разбиваете файл на равные блоки данных, допустим по 4 кб, узнаете сколько блоков всего. На клиент уходит структура, открывающая входящую передачу: Код:
Теперь, отправитель режет файл на, я уже говорил, на блоки по 4 кб, собирая в массив. Каждый блок данных это пакет данных, он должен дойти до клиента и не просто дойти, а дойти правильно! Код:
Как это работает, и что дает? Отправитель отправляет пакет с данными, который готовит принимающий клиент к приему файла данных. Клиент узнает размер файла, его контрольную сумму, имя файла. На ПК клиента создается файл размером TInputStreamHeader.pSize заполненный нулями. Затем клиент ждет пакетов данных. Приходит пакет, если надо, проверяете целостность(на клиенте считаете CRC данных и сравниваете с той что записана в пришедшем пакете), далее нам плевать что это не 1-й тот пакет данных, мы читаем Offset перемещаемся туда, и пишем блок данных размером DataCount. И так, пока счетчик пришедших блоков не будет равен тому что пришел в информационном пакете. По окончанию, вы сравниваете итоговый размер загруженного файла с инф. из инф. пакета(TInputStreamHeader), а так же контрольную сумму. В конце клиент передает серверу инф. сообщение что данные получены успешно, и оба могут закрыть подключение передачи данных. И так, что дает такой способ? 1. Прием-передачу пакететов можно вести в несколько потоков одновременно. Ярким примером такого приема данных будет Download Master. Можно не заботится о последовательности пакетов, главное чтобы пакет пришел целым и записался по Offset'у в нужном кол-ве. 2. Размер передаваемого блока, нужно калькулировать исходя из скорости передачи/приема данных на клиент(тупо пропускная способность): а. Если на сервере хорошая выходная мощность, то клиент захлебнется и будет overflow б. Если слишком малая, то могут возникнуть овер9000 выкидышей и с клиента и с сервера 3. Нужно учитывать вероятность потери пакетов, поэтому клиент должен асинхронно держать сервер(передающий) на контакте и если пакет битый - попросить этот пакет ещё раз. Все это довольно просто =) |
30.11.2012, 21:22 | #28 | |
Участник клуба
Регистрация: 12.09.2012
Сообщений: 1,030
|
Цитата:
А можно даже и передавать пакетами в размере 1 кб и по несколько в зависимости от скорости соеденения. Так передает и скайп. Ты решил несколько моих задач: -Передача файлов. -Передача несколько файлов и даже деректорий. -Прогресс передачи(прогресс бар бедет увеличиватся на 1 по мере передачи пакетов), притом можно узнать ли Кол-во блоков в Integer. -Скорость соеденения. Зато будет хорошо. Только где информацию по этому искать.
Что нужно программисту: Компьютер, Среда программирование, Воображение, Прямые руки, Мозги, Знания этой среды программирования.
Программист-это профессия, а программирование-это моё хобби. |
|
30.11.2012, 21:24 | #29 |
Участник клуба
Регистрация: 12.09.2012
Сообщений: 1,030
|
А можно ли эти пакеты передавать и принимать через соккеты?
Что нужно программисту: Компьютер, Среда программирование, Воображение, Прямые руки, Мозги, Знания этой среды программирования.
Программист-это профессия, а программирование-это моё хобби. |
30.11.2012, 21:29 | #30 | ||
Старожил
Регистрация: 30.12.2009
Сообщений: 11,430
|
Цитата:
Цитата:
|
||
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Передача файла по сокетам | grorg | Работа с сетью в Delphi | 8 | 23.09.2012 19:41 |
Передача файла по сокетам | bigmak | Помощь студентам | 1 | 24.03.2009 12:50 |
Передача файлов | Malder | Общие вопросы .NET | 2 | 03.11.2008 08:04 |
Передача файлов | DM_bite | Свободное общение | 1 | 15.09.2008 16:22 |
Передача файлов | wolff | Работа с сетью в Delphi | 3 | 03.03.2007 15:54 |