|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
24.06.2012, 01:58 | #1 |
Форумчанин
Регистрация: 29.04.2008
Сообщений: 100
|
Передача файлов и сообщений
Здравствуйте. Перелистал уже кучу форумов, но всё никак не могу найти(придумать) алгоритм для передачи файла по сети, используя один TCP сокет. Точнее: мне надо передавать файл и принимать команды одновременно. Пока же я только натыкался на примеры, в которых программа переходит в режим принятия файла и до получения нужного объёма пишет все данные в файл, потом же возвращается к приему команд. То есть, если в момент передачи файла передать команду, она будет записана в файл. Очень прошу, натолкните на мысль. Важен даже не столько алгоритм, сколько сама идея. Как например отличить кусок файла, от куска команды(если произошла фрагментация последней).
PS: Фрагментацию сообщений поборол, используя буфер, куда складываются все части команды. После того как будет получена уникальная завершающая последовательность байт, команда передается на анализ. |
24.06.2012, 10:29 | #2 |
Старожил
Регистрация: 03.01.2011
Сообщений: 2,508
|
самое простое — общаться своими пакетами. типа
Код:
таким образом, вы сможете передавать файл небольшими пакетами и свободно вставлять между ними пакеты с командами.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
|
24.06.2012, 20:58 | #3 |
Форумчанин
Регистрация: 29.04.2008
Сообщений: 100
|
Хех, вечно я забываю про использование структур. Спасибо огромное. Теперь осталось научить сервер интерпретировать поступивший поток информации как структуру и разбирать её. Дело в том, что сервер написан на масме, в котором я со структурами сталкивался всего пару раз.
|
24.06.2012, 22:18 | #4 |
Старожил
Регистрация: 03.01.2011
Сообщений: 2,508
|
ну структуру это я так, для примера набросал. Основная идея в том, что файло заливается не единым куском, а блоками. И между этими блоками мы можем безболезненно вставлять сообщения или что угодно другое. Т.е. над потоко-ориентированным ТСП мы надстраиваем свой простенький блочный протокол. Ну а т.к. каждый блок имеет одинаковый формат (заголовок), удобно оформить это как структуру. Работать с ней можно точно так же, как и с "непрерывным" блоком данных, просто смещаясь от одного поля к другому.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
|
24.06.2012, 22:58 | #5 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Главное чтоб в структуре не было динамически изменяющихся переменных. А то придется и их размеры передавать в пакете.
I'm learning to live...
|
24.06.2012, 23:01 | #6 | |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
Цитата:
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
|
25.06.2012, 01:25 | #7 |
Форумчанин
Регистрация: 29.04.2008
Сообщений: 100
|
передачу уже реализовал после первого поста =) Сейчас важен только прием на Масме, Да бы не создавать отдельную тему спрошу тут: Никто не подскажет как с помощью WinSock принять структуру и разобрать её? Просто всего пару раз видел структуры в масме, но никогда не работал
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
передача сообщений через serversocket и clientsocket | virtuhay266 | Помощь студентам | 1 | 14.12.2011 22:54 |
передача сообщений по локалке | Student1992 | Общие вопросы C/C++ | 3 | 26.11.2011 14:54 |
Передача сообщений по протоколу UDP | elmer | C# (си шарп) | 5 | 06.04.2011 16:31 |
Передача сообщений по протоколу UDP | elmer | Работа с сетью в Delphi | 4 | 05.04.2011 12:54 |
Передача файлов | Lemo | Помощь студентам | 16 | 19.05.2010 17:39 |