![]() |
Модераторы: feodorv Страницы: (8) Все « Первая ... 3 4 [5] 6 7 ... Последняя »
( Перейти к первому непрочитанному сообщению ) |
![]() ![]() ![]() |
|
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 13 Всего: 110 |
||||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 1 Всего: 250 |
после каждого сброса буффера в файл записывайте туда еще например "$$$"
чтоб наглядно бросалась в глаза.. |
|||
|
||||
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 13 Всего: 110 |
но мне не известно когда буфера сбрасываются. все что я могу, это принудительно вызывать fflush(). т.е. предлагаете вставить вызовы fflush() в обертки над sendmsg() и recvmsg() ? Добавлено через 6 минут и 4 секунды mes, я обернул код клиента в try-catch блок. теперь буфера не потеряются. есть ли смысл сбрасывать буфера после каждой записи в файл? Добавлено через 11 минут и 5 секунд теперь свалился с таким сообщением:
в client_in.log такое: ![]() число 6690985 повторяется дважды. хотя второе должно было быть 6690986 и пропал символ c и : |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 1 Всего: 250 |
чего то мы друг друга не понимаем..
я предлагаю Вам грубо говоря просто перенаправить получаемое с сокета в файл.. только добавить разделитель, после каждой операции чтения.. и без того исключения на получаемый индекс чтоб посмотреть, что будет в файле.. а окончание можно узнать по числу итераций, превышающее с запасом итерацию с возникновением ошибки.. |
|||
|
||||
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 13 Всего: 110 |
сервер вот что отправил:
![]() последние две строки повторяются. |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 1 Всего: 250 |
в общем у меня сложилось впечатление, что у Вас были две ошибки, которые создали эту ситуацию..
1. чтение не полной записи с сокета, а следовательно невозможность получения ожидаемого индекса используемым способом 2. не обнуление буффера, которое приводило к появлению неожидаемых символов.. |
|||
|
||||
boostcoder |
|
||||||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 13 Всего: 110 |
еще раз свалилось.
![]() тут уже повторение с предыдущими запусками. опять повтор. и опять пропали два символа. Добавлено @ 00:48
это от меня не зависит. согласно документации, хэндлер вызовется в случае:
с другой стороны, в последних трех скринах ситуация повторилась.
это я сделал. Это сообщение отредактировал(а) boostcoder - 10.4.2011, 00:51 |
||||||
|
|||||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 1 Всего: 250 |
сорри.. наверно ночь сказывается, но я так и не понял откуда данные попадают в этот лог.. Добавлено через 1 минуту и 8 секунд не в сбрасывании цель, а в добавлении визуального разделителя.. Добавлено через 7 минут и 5 секунд просто Вы не в праве применять scanf до тех пор пока не наполните свой буффер.. |
|||
|
||||
boostcoder |
|
||||||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 13 Всего: 110 |
в client.cpp есть такой код:
в wrappers.cpp есть такое:
Добавлено через 1 минуту и 11 секунд
так scanf() вызывается в хэндлере. а хэндлер вызывается тогда, когда указанный объем прочитан. |
||||||
|
|||||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 1 Всего: 250 |
сделайте strlen перед этим для проверки и будет ясно там ли мы ищем причину.. Добавлено @ 01:15 тогда, если подозрения правильные, то ошибки должны быть в server_out и в client_in но не в двух других.. Это сообщение отредактировал(а) mes - 10.4.2011, 01:32 |
|||
|
||||
boostcoder |
|
||||||||||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 13 Всего: 110 |
сделал.
Вы правы. вот только я немогу понять закономерность... клиент свалился с таким сообщением:
где: "expected: 10661261" - правильно. это и должно было прийти. "get: 1066126" - тут, внезапно, пропал последний знак. "buf: 1066126" - тут его тоже нет. "1expected: 10661262" - а ни это ли наша пропавшая единичка?;) на ее месте должен быть символ перевода строки. "get: 661262" - тут нет первых двух знаков. т.е. "10" "buf: 0661262" - а тут нет только первой единички. сервер получил это: ![]() а отослал это: ![]() значение 10661262 повторяется дважды. а клиент получил это: ![]() ну что, кто-то раскусил головоломку? ;) последняя версия кодов. клиент:
сервер:
Это сообщение отредактировал(а) boostcoder - 10.4.2011, 05:49 Присоединённый файл ( Кол-во скачиваний: 1 ) ![]() |
||||||||||
|
|||||||||||
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 13 Всего: 110 |
я сделал это!!!
![]() ща расскажу.. |
|||
|
||||
boostcoder |
|
||||||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 13 Всего: 110 |
обратите внимание на этот код из сервера:
последовательность такая: readed() вызывается когда данные прочитаны. из него я запускаю операцию записи и операцию чтения. и тут ошибка! операцию чтения нужно запускать из хэндлера операции записи. т.е. мало того что в доке намекается на то, что нельзя выполнять две операции записи и чтения одновременно, так оказывается что выполнять чтение пока не завершена запись(и наоборот) тоже нельзя! проверил на загруженной сети, и на локалке. все работает как надо. правильные исходники в аттаче. зы немного о впечатлениях. да, когда говорят что дока по бусту непонятная - правильно говорят. когда говорят что многое в бусте нелогично - правильно говорят. почему? да потому, что я за ночь прочел всю доку по asio от корки до корки, и не нашел ничего о том, что нельзя выполнять операцию на сокете до тех пор, пока предыдущая не завершилась! единственное что как-то на это намекает, это цитаты:
но не в одной из цитат не говорится о том, что нельзя выполнять запись пока не завершилось чтение, и на оборот! а должно быть выделено красным, и вставлено на каждой странице доки! эх... держите меня семеро ![]() MAKCim, mes, phprus, всем сильно благодарен за ваше терпение. всем спасибо. ![]() Это сообщение отредактировал(а) boostcoder - 10.4.2011, 06:58 Присоединённый файл ( Кол-во скачиваний: 2 ) ![]() |
||||||
|
|||||||
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 13 Всего: 110 |
но мне все равно не понятно, каким образом операция чтения запущенная одновременно с операцией записи может портить данные которые записываются
![]() |
|||
|
||||
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 13 Всего: 110 |
удивительно... но использование канала наладилось. 94%
![]()
Это сообщение отредактировал(а) boostcoder - 10.4.2011, 07:33 |
|||
|
||||
![]() ![]() ![]() |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Сети | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |