| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Системное программирование и WinAPI > перехват WSArecv |
| Автор: bass 22.5.2012, 17:43 | ||
| Ребят выручайте что не так написал ??????? WSAsend Таким макаром отлично работает а вот wsarecv не работает.......((((((((( EventTranslete2(lpBuffers->len,lpBuffers->buf ); Функция отправки пакета моему приложению ..... Работает..... WSARecvZ родной вызов ........... Причем приложение нормально работает, смотрю отладчиком lpBuffers->len равняеться 2, lpBuffers->buf указывает фиг знает на что.........(((((((((( Причем функция перехвата wsasend работает замечательно, а параметры у нее такиеже......
Заранее спасибо... |
| Автор: xvr 22.5.2012, 17:59 |
В чем заключается 'не работает'? Не попадают данные в приложение через EventTranslete2? Возможно WSARecv вызывают в Overlapped режиме и реальная передача данных происходит в другом месте |
| Автор: bass 22.5.2012, 18:40 |
| О ...... Спасибки скорее всего так и есть а значит сообщение у нас находиться в прошлом буффере попробую выкрутиться так............. В отладчике его и видел тролько новый буфер указыват на какойто мусор........ Связь этого преложения только через один сокет.... Может и получиться ..... А правильнее как выкручиваться в такой ситуации??? |
| Автор: bass 22.5.2012, 20:26 |
| lpOverlapped = 0 .....Посмотрел отладчиком..... Тогда вообще не чего не пойму.......................... Значит буффер должен заполняться привызове функции.... dwBufferCount = 1...... Вчем косяк то????? |
| Автор: feodorv 22.5.2012, 20:35 |
А чему равно Result? Дело в том, что сокет может находится в асинхронном режиме. Программа выдаёт запрос на чтение, а в буфере приёма сокета пусто. Синхронный сокет в таком случае просто ждал бы прихода каких-нибудь данных. А асинхронный возвращает SOCKET_ERROR с ошибкой WSAEWOULDBLOCK. |
| Автор: bass 22.5.2012, 22:19 |
| Смотрел.... В мою программу какоето г..... Приходит пардон за выражение..... По два байта...... В тот момент когда я посылаю соообщение этой программе........... И в коде стоит........ ТОгдабы не чего не приходило.................. if (Result != SOCKET_ERROR) { |
| Автор: bass 26.5.2012, 16:25 |
| А какая разница ...... .. Их можно было и DWORD Все обозвать кроме воторого.......... Что пишло по стеку то и ушло на вызов родной (Может это с точки программирования не корректно )...... Главное соглашение о вызове чтоб одинаковое было....... И не слетал стек........ Самое что удивительное...... По отладчиком все работает..... Вот это незадача........ |
| Автор: feodorv 26.5.2012, 19:26 |
Это если у Вас 32-битная система |
| Автор: bass 26.5.2012, 20:08 | ||
Да 32ти двух битная........ Как я и писал с точки зрения программирования ..... (Может это с точки программирования не корректно ).... Сейчас интересует почему работает не корректно......... Только вот под отладчиком все работает.... Буду пробывать поставить паузы............. Система ХР.... Спасибо за помощь... |
| Автор: feodorv 26.5.2012, 22:06 |
| Честно говоря, я не могу понять, почему так сложно подправить всего одну строчку, прикрываясь "да какая разница". А может есть? Вы проверяли? Вы указатель на callback-функцию превратили в DWORD. Откуда Вы знаете, что там с этим натворит компилятор? Просто проверьте и исключите такую возможность, это же не сложно... |
| Автор: bass 27.5.2012, 08:16 | ||
Отладчиком посмотрел что все переменные передаються в целостности и сохранности...... Олькой ..... А вод почему под отладчиком работает а в реле нет.... Буду разбираться ...... Сейчас я думаю не кто мне не поможет кроме самого себя...... Сначало подумал в функции дело........ А оказалось на много сложнее..... |