![]() |
|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Форумчанин
Регистрация: 29.04.2008
Сообщений: 100
|
![]()
Здравствуйте. Перелистал уже кучу форумов, но всё никак не могу найти(придумать) алгоритм для передачи файла по сети, используя один TCP сокет. Точнее: мне надо передавать файл и принимать команды одновременно. Пока же я только натыкался на примеры, в которых программа переходит в режим принятия файла и до получения нужного объёма пишет все данные в файл, потом же возвращается к приему команд. То есть, если в момент передачи файла передать команду, она будет записана в файл. Очень прошу, натолкните на мысль. Важен даже не столько алгоритм, сколько сама идея. Как например отличить кусок файла, от куска команды(если произошла фрагментация последней).
PS: Фрагментацию сообщений поборол, используя буфер, куда складываются все части команды. После того как будет получена уникальная завершающая последовательность байт, команда передается на анализ. |
![]() |
![]() |
![]() |
#2 |
Старожил
Регистрация: 03.01.2011
Сообщений: 2,508
|
![]()
самое простое — общаться своими пакетами. типа
Код:
таким образом, вы сможете передавать файл небольшими пакетами и свободно вставлять между ними пакеты с командами.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
|
![]() |
![]() |
![]() |
#3 |
Форумчанин
Регистрация: 29.04.2008
Сообщений: 100
|
![]()
Хех, вечно я забываю про использование структур. Спасибо огромное. Теперь осталось научить сервер интерпретировать поступивший поток информации как структуру и разбирать её. Дело в том, что сервер написан на масме, в котором я со структурами сталкивался всего пару раз.
|
![]() |
![]() |
![]() |
#4 |
Старожил
Регистрация: 03.01.2011
Сообщений: 2,508
|
![]()
ну структуру это я так, для примера набросал. Основная идея в том, что файло заливается не единым куском, а блоками. И между этими блоками мы можем безболезненно вставлять сообщения или что угодно другое. Т.е. над потоко-ориентированным ТСП мы надстраиваем свой простенький блочный протокол. Ну а т.к. каждый блок имеет одинаковый формат (заголовок), удобно оформить это как структуру. Работать с ней можно точно так же, как и с "непрерывным" блоком данных, просто смещаясь от одного поля к другому.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
|
![]() |
![]() |
![]() |
#5 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
![]()
Главное чтоб в структуре не было динамически изменяющихся переменных. А то придется и их размеры передавать в пакете.
I'm learning to live...
|
![]() |
![]() |
![]() |
#6 | |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
![]() Цитата:
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
|
![]() |
![]() |
![]() |
#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 |