| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Сети > Зависание приложения |
| Автор: ZaDoXliK 6.12.2009, 23:35 | ||||
| Вечер добрый. Есть 3 приложения, A - клиент, B - сервер, С - моя программа. А и В обмениваются данными через сокет. Я с помощью программы C внедряюсь в программу A и посылаю пакет на В от имени А. Все прекрасно работает, пакет отсылается как положено но возникает проблема. Проблема такая: Приложение В зависает. Для внедрения в чужой сокет использую DuplicateHandle.
АН-сервер SName-хендл сокета СН-моё приложение. NewHWND-дубликат. Собственно говоря приложение А зависает после:
Пакет доходит нормально но приложение А зависает. Если вызвать WSACleanup то приложение А перезапустится и все. Т.е. после WSACleanup я так понимаю соединение с сервером теряется просто напросто, по этому и перезапускается А . Как избавится от зависания клиента (А)? |
| Автор: ZaDoXliK 7.12.2009, 02:48 |
| Вариантов, идей, мыслей никаких нет? |
| Автор: Демо 7.12.2009, 16:05 |
| ZaDoXliK, Ты уверенЮ, что сервер понимает, что ты ему посылаешьь и умеет это обрабатывать? |
| Автор: ButtonOFF 7.12.2009, 16:32 |
| Полный код в студию |
| Автор: kami 7.12.2009, 21:40 |
А смысл? Демо, сказал правильно - неизвестно. как приложения отреагируют на отправку незапланированных данных. Например, в моих приложениях из-за этого пойдет неправильный учет переданной информации (причем - и на передающем и на приемном концах), из-за особенностей протокола обмена. Во что это выльется - без малейшего понятия, но ничего кроме AV и других исключений в голову не приходит... Посему - не знаешь протокола обмена - нечего соваться. |
| Автор: ZaDoXliK 7.2.2010, 17:04 | ||
Я отслеживал свой пакет программой WPE Pro. Так же пробовал и отсылать свой пакет через WPE Pro. Результат один и тот же если.Пакет доходит,действие выполняетя на сервере но через WPE приложение А(клиент)не виснет и продолжает работать без изменений, а через мою программу оно зависает после команды Send. |
| Автор: ZaDoXliK 9.2.2010, 11:03 | ||||
| Еще вопрос. Вот так работает.
Тут paket после отправки=6. Это правильно.Тут читается как hex значение. А вот так не работает.
Тут paket после отправки=24. Это не правильно.Тут как обычный текст. Как сделать что бы из Memo читалось hex значение? |
| Автор: ZaDoXliK 14.2.2010, 11:13 | ||
| Странно,добавил строчку после DuplicateHandle и приложение иногда не зависает. Теперь код выглядит так:
Возникло пару вопросов. 1)Когда делаю копию сокета,использую её-оригиналу нужно возвращать управление или оно и не теряется? 2)Может проблема зависания в том что приложение "А"(сокет которого я дублирую) построено на флешь?Ведь иногда оно не виснет,и я вижу все действия которые выполняются,а иногда экран просто замерзает, но пакеты отправляются на сервер и обрабатываются правильно.Тут уже наверно проблема с обновлением самого приложения.Т.е. нужно его как то обновить но без реконекта к серверу. Что то типа refresh или repaint. Есть у кого идеи,может какие то предположения? Не боимся отвечать,все делаем ошибки,на этом же и учимся З.Ы.Сделал тестовый сервер и приложение которые обмениваются данными,и в этом случае ничего ни где не виснет.Думаю всё таки что проблема зависания экрана в приложении "А" это как раз то что оно на флеш построено.И там тупо картинка не обновляется после того как я посылаю пакет. |
| Автор: ZaDoXliK 16.2.2010, 15:54 | ||||
| Ребята,может кто ни будь продемонстрировать как использовать WSADuplicateSocket на примере? Гугл пишет одно и тоже,везде копипаст и нет толковых примеров. Я там понимаю WSADuplicateSocket действует совсем по другому,не так как DuplicateHandle. Последовательность действий подскажите хотя бы. В DuplicateHandle я делаю так: Код DLL
Использование в программе:
|
| Автор: ZaDoXliK 9.4.2010, 14:00 |
| Проблема решена другим способом. Простым и безболезненным Тему можно закрывать. |