Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> перехват WSArecv 
V
    Опции темы
bass
Дата 22.5.2012, 17:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 315
Регистрация: 5.8.2007

Репутация: 2
Всего: 2



Ребят выручайте что не так написал ??????? 
WSAsend Таким макаром отлично работает а вот wsarecv не работает.......((((((((( 

EventTranslete2(lpBuffers->len,lpBuffers->buf ); Функция отправки пакета моему приложению ..... Работает.....

WSARecvZ родной вызов ...........


Причем приложение нормально работает, смотрю отладчиком lpBuffers->len равняеться 2,
lpBuffers->buf указывает фиг знает на что.........((((((((((

Причем функция перехвата wsasend работает замечательно, а параметры у нее такиеже...... 


Код

extern "C" __declspec(dllexport)int __stdcall   WSARecv   (  HANDLE Socket,LPWSABUF lpBuffers,DWORD dwBufferCount,
LPDWORD lpNumberOfBytesSent,DWORD dwFlags,DWORD lpOverlapped,DWORD lpCompletionRoutine)
{
DWORD Result = 0;
DWORD BufferLeghtSend = 1000;



Result =  WSARecvZ     (Socket,lpBuffers,dwBufferCount,lpNumberOfBytesSent,dwFlags,lpOverlapped,lpCompletionRoutine);

if (Result != SOCKET_ERROR) 
{

    if(SocketOpen == Socket)
    {
    //EventTranslete2(BUFFERLenght,(char*)BUFFERSEND );
    EventTranslete2(lpBuffers->len,lpBuffers->buf );
    }
}
return Result;
}



Заранее спасибо...

Это сообщение отредактировал(а) GremlinProg - 23.5.2012, 06:44
PM MAIL   Вверх
xvr
Дата 22.5.2012, 17:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 40
Всего: 223



Цитата(bass @  22.5.2012,  17:43 Найти цитируемый пост)
WSAsend Таким макаром отлично работает а вот wsarecv не работает

В чем заключается 'не работает'? Не попадают данные в приложение через EventTranslete2? Возможно WSARecv  вызывают в Overlapped режиме и реальная передача данных происходит в другом месте


PM MAIL   Вверх
bass
Дата 22.5.2012, 18:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 315
Регистрация: 5.8.2007

Репутация: 2
Всего: 2



О ...... Спасибки скорее всего так и есть а значит сообщение у нас находиться в прошлом буффере попробую выкрутиться так............. В отладчике его и видел тролько новый буфер указыват на какойто мусор........
Связь этого преложения только через один сокет.... Может и получиться .....
А правильнее как выкручиваться в такой ситуации???
PM MAIL   Вверх
bass
Дата 22.5.2012, 20:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 315
Регистрация: 5.8.2007

Репутация: 2
Всего: 2



lpOverlapped = 0 .....Посмотрел отладчиком..... Тогда вообще не чего не пойму.......................... Значит буффер должен заполняться привызове функции....

dwBufferCount = 1......

Вчем косяк то????? smile  smile  smile  smile  smile 

Это сообщение отредактировал(а) bass - 22.5.2012, 20:28
PM MAIL   Вверх
feodorv
Дата 22.5.2012, 20:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 9
Всего: 45



Цитата(bass @  22.5.2012,  21:26 Найти цитируемый пост)
Посмотрел отладчиком.....

А чему равно Result? Дело в том, что сокет может находится в асинхронном режиме. Программа выдаёт запрос на чтение, а в буфере приёма сокета пусто. Синхронный сокет в таком случае просто ждал бы прихода каких-нибудь данных. А асинхронный возвращает SOCKET_ERROR с ошибкой WSAEWOULDBLOCK. 


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
bass
Дата 22.5.2012, 22:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 315
Регистрация: 5.8.2007

Репутация: 2
Всего: 2



Смотрел.... В мою программу какоето г..... Приходит пардон за выражение..... По два байта...... В тот момент когда я посылаю соообщение этой программе...........

И в коде стоит........ ТОгдабы не чего не приходило..................
if (Result != SOCKET_ERROR) 
{
PM MAIL   Вверх
feodorv
Дата 22.5.2012, 22:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 9
Всего: 45



Цитата(bass @  22.5.2012,  23:19 Найти цитируемый пост)
И в коде стоит........ ТОгдабы не чего не приходило..................

Ну, просто не совсем внятно написано, что и когда происходит.

Первое, что бросается в глаза - прототип функции WSARecv. Должно быть:
Код

int WSARecv(
  SOCKET s,
  LPWSABUF lpBuffers,
  DWORD dwBufferCount,
  LPDWORD lpNumberOfBytesRecvd,
  LPDWORD lpFlags,
  LPWSAOVERLAPPED lpOverlapped,
  LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine
);


У Вас:
Цитата

extern "C" __declspec(dllexport) 
int __stdcall WSARecv(  
  HANDLE Socket,
  LPWSABUF lpBuffers,
  DWORD dwBufferCount,
  LPDWORD lpNumberOfBytesSent,
  DWORD dwFlags,
  DWORD lpOverlapped,
  DWORD lpCompletionRoutine);

Поправьте, пожалуйста smile 


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
bass
Дата 26.5.2012, 16:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 315
Регистрация: 5.8.2007

Репутация: 2
Всего: 2



А какая разница ...... .. Их можно было и DWORD Все обозвать кроме воторого.......... Что пишло по стеку то и ушло на вызов родной (Может это с точки программирования не корректно )......
Главное соглашение о вызове чтоб одинаковое было....... И не слетал стек........ Самое что удивительное...... По отладчиком все работает..... Вот это незадача........    smile  smile  smile  
PM MAIL   Вверх
feodorv
Дата 26.5.2012, 19:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 9
Всего: 45



Цитата(bass @  26.5.2012,  17:25 Найти цитируемый пост)
Их можно было и DWORD Все обозвать кроме воторого..........

Это если у Вас 32-битная система  smile Я ж не в курсе... Но привести к одинаковым типам стОит...



--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
bass
Дата 26.5.2012, 20:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 315
Регистрация: 5.8.2007

Репутация: 2
Всего: 2



Цитата(feodorv @ 26.5.2012,  19:26)
Цитата(bass @  26.5.2012,  17:25 Найти цитируемый пост)
Их можно было и DWORD Все обозвать кроме воторого..........

Это если у Вас 32-битная система  smile Я ж не в курсе... Но привести к одинаковым типам стОит...

Да 32ти двух битная........  Как я и писал с точки зрения программирования .....
(Может это с точки программирования не корректно )....
Сейчас интересует почему работает не корректно.........    
Только вот под отладчиком все работает....
Буду пробывать поставить паузы.............

Система ХР....

Спасибо за помощь...
PM MAIL   Вверх
feodorv
Дата 26.5.2012, 22:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 9
Всего: 45



Честно говоря, я не могу понять, почему так сложно подправить всего одну строчку, прикрываясь "да какая разница". А может есть? Вы проверяли? Вы указатель на callback-функцию превратили в DWORD. Откуда Вы знаете, что там с этим натворит компилятор? Просто проверьте и исключите такую возможность, это же не сложно...
 smile 

Это сообщение отредактировал(а) feodorv - 27.5.2012, 04:27


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
bass
Дата 27.5.2012, 08:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 315
Регистрация: 5.8.2007

Репутация: 2
Всего: 2



Цитата(feodorv @ 26.5.2012,  22:06)
 Откуда Вы знаете, что там с этим натворит компилятор? 
 smile

Отладчиком посмотрел что все переменные передаються в целостности и сохранности...... Олькой .....

А вод почему под отладчиком работает а в реле нет.... Буду разбираться ......

Сейчас я думаю не кто мне не поможет кроме самого себя...... Сначало подумал в функции дело........ А оказалось на много сложнее.....
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0544 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.