Название: QTcpSocket конец данных Отправлено: boobsik от Августа 17, 2009, 20:20 как узнать, что сокет на другом конце больше ничего не собирается писать в мой?
чтобы я начал писать ему? искал сигналы типа readyRead(), но наоборот =) не нашел.. надо просто узнать, что данным пришел конец, чтобы начать их обрабатывать.. Название: Re: QTcpSocket конец данных Отправлено: BRE от Августа 17, 2009, 20:24 как узнать, что сокет на другом конце больше ничего не собирается писать в мой? Вот для этого и придумывают всяческие протоколы. ;)чтобы я начал писать ему? искал сигналы типа readyRead(), но наоборот =) не нашел.. надо просто узнать, что данным пришел конец, чтобы начать их обрабатывать.. Это тебе решать, как разработчику, как одна сторона будет сообщать другой о завершении передачи. Можно указывать длину передаваемых данных в начале, можно присылать какую нибудь метку в конце.... Много чего еще можно придумать. Название: Re: QTcpSocket конец данных Отправлено: kuzulis от Августа 17, 2009, 20:26 упс.. опередили
Название: Re: QTcpSocket конец данных Отправлено: boobsik от Августа 17, 2009, 20:32 я так понимаю, что если речь идет о html или любом другом текстовом файле, то символом конца файла будет '\0' ? :)
Название: Re: QTcpSocket конец данных Отправлено: BRE от Августа 17, 2009, 20:40 я так понимаю, что если речь идет о html или любом другом текстовом файле, то символом конца файла будет '\0' ? :) Ну там все чуть посложней. ;)http://ru.wikipedia.org/wiki/HTTP Название: Re: QTcpSocket конец данных Отправлено: boobsik от Августа 17, 2009, 20:58 значит если в по хттп протоколу в теле передается картинка или другая фигня, то шлется Content-Length: в заголовке, а если это текстовый(*.html, *.htm, *.php, *.js и.т.д.) то конец тела обозначается символом '\0'! Правильно? =)
Название: Re: QTcpSocket конец данных Отправлено: ритт от Августа 17, 2009, 20:58 я так понимаю, что если речь идет о html или любом другом текстовом файле, то символом конца файла будет '\0' ? :) lolс каких пор html - протокол? ;) Название: Re: QTcpSocket конец данных Отправлено: ритт от Августа 17, 2009, 20:59 значит если в по хттп протоколу в теле передается картинка или другая фигня, то шлется Content-Length: в заголовке, а если это текстовый(*.html, *.htm, *.php, *.js и.т.д.) то конец тела обозначается символом '\0'! Правильно? =) неправильно. там вообще строки разделяются по crlf.тебе ссылку зря дали? - читай. Название: Re: QTcpSocket конец данных Отправлено: boobsik от Августа 17, 2009, 21:01 lol хттп)) читать внимательней надо ;Dс каких пор html - протокол? ;) за ссылку спасибо, буду вкуривать)) Название: Re: QTcpSocket конец данных Отправлено: BRE от Августа 17, 2009, 21:06 за ссылку спасибо, буду вкуривать)) Вот здесь по забористей: http://book.itep.ru/4/45/http4561.htm:) Название: Re: QTcpSocket конец данных Отправлено: boobsik от Августа 17, 2009, 21:10 за ссылку спасибо, буду вкуривать)) Вот здесь по забористей: http://book.itep.ru/4/45/http4561.htm:) Название: Re: QTcpSocket конец данных Отправлено: BlackTass от Августа 18, 2009, 09:33 Если протокол уже готовый и менять его нелзья, а по какой-то причине в нем нет длины тела пакета, то можно воспользоваться эвристическим приемом:
1. Принимаем первую порцию данных 2. Ждем n-ное время 3. Если пришло то принимаем и опять на пункт 2. Если не пришло то считаем что данные закончились. Число n подбирается исходя из ожидаемой ширины канала (для обычного русского интернета хватает числа 1,5 секунды) Название: Re: QTcpSocket конец данных Отправлено: boobsik от Августа 18, 2009, 09:36 в http 1.1 видимо "эвристический прием" не подойдет)) там за одними данными сразу могут идти другие)
Название: Re: QTcpSocket конец данных Отправлено: pastor от Августа 18, 2009, 11:14 Я с ходу не могу себе представить кто и в каких случаях будет применять т.н. "эвристический прием". Ведь его надежность 0.
Название: Re: QTcpSocket конец данных Отправлено: BlackTass от Августа 18, 2009, 18:35 Я с ходу не могу себе представить кто и в каких случаях будет применять т.н. "эвристический прием". Ведь его надежность 0. Диалоговый протокол. Самое оно. Хотя лучше чем размер пакета не придумано конечно ничего.Название: Re: QTcpSocket конец данных Отправлено: kuzulis от Августа 18, 2009, 19:59 Ну в принципе можно использовать маркеры начала и конца передачи, если размер принимаемого пакета неизвестен, да и не факт, что первое принятое значение будет являтся значением длины пакета данных .. т.о. можно оч промахнутся :)
Вы скажите сначала для чего вы будете использовать сокеты (т.к. ничего не сказано о целях) - а по результатам ваших ответов уже мы может быть поможем с выбором протокола обмена :) Название: Re: QTcpSocket конец данных Отправлено: boobsik от Августа 18, 2009, 22:04 я хочу написать прокси сервер для анализа веб трафика. Пока только веб, но меня интересует возможность анализа и других протоколов в перспективе, поэтому сейчас нахожусь в размышлении как организовать загрузку данных.. Пока остановился на том, что каждая транзакция будет происходить в отдельном потоке, в голове плавают мысли об интерфейсе для загрузки данных из сокета loader, который будет принимать в конструкторе ссылку на сокет и на массив байтов, но вот только не совсем понимаю, как под этот интерфейс подставить нужного наследника интерфейса... ведь для того, чтобы за интерфейсом скрывался нужный класс необходимо сначала прочитать первые данные, а потом уже вызвать конструктор.. может быть кто-нибудь подскажет ссылку на UML диаграмку? хотелось бы сделать подставку нужного класса, необходимо красивое решение )
|