4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|
1 | |
Альтернативная передача файлов + чат.12.04.2010, 13:35. Показов 1781. Ответов 15
Метки нет (Все метки)
Надо поддерживать на одном порту:
1. Управление, причём, не всей системой, а только самой этой прогой. 2. Передачу: 2.1. Координат курсора. 2.2. Текста. 2.3. Файлов. 2.4. Скринов экрана. 2.5. Синхронного скринвидео. Учесть: 1. Файл может не влезать в пакет сетевого уровня. 2. Несколько клиентов одного сервера могут предавать файлы одновременно. 3. Клиент, или тот, кто сидит непосредственно за сервером, может, не дождавшись окончания передачи одного файла, дать команду на передачу следующего. 4. Клиент может получать файлы через сервер от других клиентов, в том числе. 5. Несколько клиентов могут направить файлы одному. 6. Файлы можно отправить и на сам сервер. Порезать один файл я могу. А как не потерять и не перепутать фрагменты сразу нескольких файлов? Добавлено через 43 секунды Кстати, как определить максимальный размер поля данных пакета протокола сетевого уровня?
0
|
12.04.2010, 13:35 | |
Ответы с готовыми решениями:
15
Чат в Delphi, передача файлов Чат локальной сети. Передача больших файлов Нужна альтернативная по качеству прога для воспроизведения аудио файлов Чат (передача месаг по интернету) |
229 / 67 / 11
Регистрация: 02.06.2009
Сообщений: 280
|
|
12.04.2010, 14:13 | 2 |
Есть сокеты, которые решают все эти проблемы за тебя. Если тебе нельзя юзать сокеты, и ты пытаешся напрямую работать с драйвером, то знаний для этой задачи у тебя явно маловато, и я не рекомендовал бы тебе за неё браться.
0
|
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|
14.04.2010, 05:23 [ТС] | 3 |
Затем, что в поле данных пакета сетевого уровня он не влезает.
Я и хочу сокетами, но этих проблем они не решают. При попытке отправить больше, оправляется максимум. Таким образом я могу найти максимум, но мне надо, чтоб определялось автоматически и было известно не только серверу, но и клиентам.
Добавлено через 2 минуты Согласен, но тебе откуда это известно?
0
|
229 / 67 / 11
Регистрация: 02.06.2009
Сообщений: 280
|
|
14.04.2010, 06:18 | 4 |
Омг. Да какое тебе дело скоко влазит в ип пакет? Ты написал на хост1 send, оно и отправило столько, сколько написал. Ни больше, ни меньше( если без ошибок завершился вызов) Написал на хост2 recv винда и приняла, сколько попросил, ни больше, ни меньше( если без ошибок завершился вызов, или даные не кончились). Порежется/склеится все без тебя. Представь себе один сокет как трубу с водой - что влили то и выливается. Не важно сколько раз влили, оно все выливатся будет одним потоком. Поэтому сначало передают размер файла, потом файл. И ничего там не перепутается, как послал, так и примется.
ЛОЛ. Ну, телепат я.
0
|
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|
14.04.2010, 07:47 [ТС] | 5 |
. Бред. Отправляется ровно один пакет сетевого уровня, принимающий сокет из него вытаскивает поле данных, остальное выбрасывает. То, что выброшено, мне и не надо. Но есть максимум передаваемого поля. В моей сети это 1500 байт, а мне надо передать несколько десятков мегабайт. Столько не влазит, а сокеты сдесь не помощники. Отправляющий сокет отправляет сколько влезет (а не сколько написано), а остальное выбрасывает.
Добавлено через 14 минут Ошибок при этом не происходит. Сокеты этого не умеют. Сокеты - это не труба, а транспортный цех со своей косой разливкой по бутылкам. Я отправляю тон десять соляной кислоты, разбавленной до одного промиле и четыре тнооны серной с концентрацией ещё порядка на два меньше, а приходят тысячи бутылок по полтора литра. Задача: слить серную кислоту в одну цистерну, соляную - в другую, на обеих написать, что внутри и ни одну бутылку не перепутать (не вылить не в ту цистерну). Если вообще все бутылки не в свои цистерны и надписи тоже наоборот, то не беда, а смешивать нельзя. И в процессе отправки добавляется полцентнера сухой щелочи, которую надо всю в третью цистерну и написать KOH 100%, а не высыпать половину порошка в обе кислотные цистерны. Причём, если я привезу сразу всю свою цистерну и отдам, то первую бутылку наполнят и пошлют, а остальная кислота будет на полу цеха, поэтому надо разлить самому и отдать бутылки. Их погрузят каждую на отдельную машину выпишут на каждую путевой лист, а потом надо снова слить всё в цистерны, сливать в цистерны придётся самому, а путевые листы мне даже не покажут, поэтому, чтобы не перепутать бутылки я ещё должен их все промаркировать этикетками. Если ты этим не занимался и знаешь ещё меньше меня, то лучше не отвечай. Я сам знаю мало, но хоть это смог обнаружить экспериментальным путём, а у тебя одни рассуждения о трубах. Добавлено через 1 минуту Кстати, есть ли сокеты на gcc? И можно ли такую софтину написать вообще в кросплатформе?
0
|
229 / 67 / 11
Регистрация: 02.06.2009
Сообщений: 280
|
|
14.04.2010, 14:52 | 6 |
У тебя очень особое воображение. У драйвера есть буфер куда он лепит все твои пакеты сам, без твоего участия, и сортирует тоже.
Не надо рассекать здесь мысью по древу, напиши клиент и сервер, и попробуй, а изыски своего воображения иди расскажи тому, кому они нужнее. Это у тебя проблема с сетью, не забыл еще?
0
|
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|
15.04.2010, 10:58 [ТС] | 7 |
Я уже пробовал. А ты ещё нет? Только рассуждаешь о том, что сокет якобы берёт всё на себя и подобен трубе? Я послал 27 мегабайт, пришло 1500 байт в одном пакете, а остаток не дошел совсем.
Сокет только режет, но не лепит и не сортирует. Это ты заговорил о трубах и жидкостях. Вот именно. И не надо меня убеждать, что такой проблемы вообще нет. Факт её существования мне известен лучше, а не хуже, именно потому, что эта проблему у меня. Короткие пакеты я и сам очень даже хорошо умею отправлять и получать, а длинные приходят в урезанном виде. Добавлено через 14 минут Кажется придумал вариант автоизмерения максимума. Максимум определяет сервер. Для этого он в в цикле наращивает длину пакета и отправляет себе со второго клиентского сокета на адрес 127.0.0.1, пока не получит меньше, чем отправил, а клиенты получают измеренное таким образом значение с сервера, в его пакете, идентифицирующем протокол. Есть лучшее решение? Каковы дыры этого решения? Каковы минимальные ограничения длины поля данных пакетов протоколов канального и сетевого уровня? Добавлено через 2 часа 6 минут Мои наброски по резке файлов, кадров, скриншотов: 1.Каждый пакет начинается кодом назначения. 2. Далее в пакетах, передаваемых сервером идёт код типа источника: 00h - клиент, FFh — сервер. 3. В транзитные пакеты сервер добавляет номер клиента-источника сразу после вида кода вида источника. 4. Каждый файл, скриншот, или скринвидео идёт в своей группе пакетов. Группы нумеруются восьми байтными номерами в пределах каждого вида трафика. Номер завершённой группы освобождается и передаётся последней группе того же вида. 5. Номер группы указывается в пакете после вида источника, а в транзитных пакетах после 6. Для каждой группы создаётся специальный растущий буфер приёма, привязанный к её номеру, виду трафика и к источнику. 7. Буфер группы скринвидео создаётся заново для каждого нового кадра. При этом только что принятый кадр отображается на экран, а использованный буфер сразу очищается. 8. Каждая группа начинается и завершается маркерным пакетом. 9. Во всех пакетах группы указываетсяы номер группы: 9.1. Если пакет отправлен с клинета на сервер - после кода назначения. 9.2. Если пакет отправлен с сервера клиенту - после кода вида источника. 9.3. Если пакет транзитный - после номера клиента-источника. 10.1.1. Далее в каждом пакете файловой группы, идёт внутри групповой восьми байтный номер пакета. Стартовый маркет имеет номер 0. 10.1.2. Стартовые маркеры файловых групп содеражат имя файла после номера пакета. 10.2.1. Далее в каждом пакете файловой группы, идёт внутри групповой восьми байтный номер пакета. Стартовый маркет имеет номер 0. 10.2.2. Стартовые маркеры скиншотовых групп содержат размеры растра после номера пакета. 10.3.1. Далее в каждом пакете группы скринвидео идёт номер пакета. 10.3.2. Каждый кадр скринвидео начинается и завершается отдельным маркером. 10.3.2.1. В группах скринвидео каждый пакет имеет восьми байтный внутрикадровый номер после номера группы. Номер стартового маркера 0. 10.3.2.2. Стартовые маркеры кадров содержат размеры кадра. Каковы дыры этого решения?
0
|
229 / 67 / 11
Регистрация: 02.06.2009
Сообщений: 280
|
|
15.04.2010, 12:20 | 8 |
0
|
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|||||||||||
15.04.2010, 12:46 [ТС] | 9 | ||||||||||
Сервер:
0
|
229 / 67 / 11
Регистрация: 02.06.2009
Сообщений: 280
|
|
15.04.2010, 13:58 | 10 |
Добавь код
Connections[i].SendBuff Connection.ResiveBuff + код ожидания, т.е. при каких условиях вызывается OnRead. Дeтализируй до уровня send/recv(wsasend) И не пиши с головы, дай реальный код. (FileRead, может таки ReadFile ?) А размер файла проще узнать через GetFileSize.
0
|
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|
16.04.2010, 06:20 [ТС] | 11 |
Если хоть что-то есть для приёма.
Читай мой код, там это уже есть. Добавлено через 2 минуты У меня есть обе, причём, одна явно оболочка для другой, а использована именно FileRead. Добавлено через 3 минуты Доступ в сеть имею только из-под linux, а тот код был в болэнде на то В linux через Подскажи, как серверный и клиентский сокеты зовут в эклипсе и в какой голове они валяются. Добавлено через 3 минуты У меня сеть только из под linux, а тот код был в болэнде под виндой, на той же машине, до переустановки на ней оси и давно стёрт. Есть в linux какие-нибудь сокеты под эклипсом? Как их зовут? В какой голове валяются?
0
|
229 / 67 / 11
Регистрация: 02.06.2009
Сообщений: 280
|
|
16.04.2010, 12:20 | 12 |
1
|
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|
16.04.2010, 12:26 [ТС] | 13 |
Это обработчик события, его наступление отслеживала винда.
Добавлено через 3 минуты Сам же сказал сокетами, а теперь требуешь через внутренности апишки.
0
|
229 / 67 / 11
Регистрация: 02.06.2009
Сообщений: 280
|
|
19.04.2010, 14:11 | 14 |
Какие апишки? Ты вообще, что под сокетами понимаеш?
http://msdn.microsoft.com/en-u... S.85).aspx Читай отсюда и до просветления. И поищи примеры в нете клиента и сервера на апи. Они на одну страницу умещаются.
0
|
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|
20.04.2010, 06:02 [ТС] | 15 |
Болэндовские компоненты TClientSocket и TServerSocket, или их аналоги (но аналогов я пока не видел).
0
|
3953 / 1808 / 184
Регистрация: 21.11.2009
Сообщений: 2,540
|
|
23.04.2010, 22:44 | 16 |
taras atavin, что-то вы действительно путаете.
Хотите использовать чистые сокеты? Почитайте Криса Касперски: http://www.insidepro.com/kk/006/006r.shtml Тут есть и описание функций и реализация простейших приложений. Компоненты TClientSocket, TServerSocket на данный момент уже не существуют в новых версиях IDE. В свободное пользование их переделанные варианты предоставляет Indy.
0
|
23.04.2010, 22:44 | |
23.04.2010, 22:44 | |
Помогаю со студенческими работами здесь
16
Передача текста по радио каналу(чат) поиск файлов,чат и тд Потоковая передача данных (аля чат рулет) с чего начать ? Чат с отправкой файлов(Сокет) Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |