Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 20.06.2008, 21:04   #1
vynt
Пользователь
 
Регистрация: 16.05.2008
Сообщений: 17
Вопрос Сокеты в DLL

Привет всем! Помогите советом или примером, если можете.

Нужно реализовать работу с сокетами через DLL. При получении данных должна вызывается CallBack функция во внешнем модуле (EXE или другой DLL), для открытия сокета и передачи данных - экспортируемые функции.
Попробовал компонент TIdTCPServer - до поры до времени всё работает, потом "ошибка дескриптора потока" с таинственным номером 6, и полный ступор.
Переделал c компонентом TCPServerSocket - тоже работает недолго, потом просто перестаёт читать данные.

Очень надо и очень срочно! Ещё вчера...
vynt вне форума
Старый 20.06.2008, 22:40   #2
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

а может сессия "отваливается" ? тут общего решения нет, надо разбирать каждый случай в отдельности
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума
Старый 21.06.2008, 00:39   #3
vynt
Пользователь
 
Регистрация: 16.05.2008
Сообщений: 17
По умолчанию

Сессия не отваливаеться...
Как удалось выяснить, "не на тот" поток грешил, потому уточняю вопрос:
Внутри DLL "A" существует поток, с двумя "событиями" в том числе по таймеру. По таймеру же вызываються функции, поочерёдно из DLL "B1", "B2" и т.д.
DLL "A" можно считать менеджером серверных сокетов. В DLL "B" реализованы различные протоколы, передаются одни и те жи данные но с преобразованием.
Почему-то завершаеться поток в DLL "A"?... Срабатывает обычный "until terminate". При попытке закрыть прогу и уничтожить поток - "ошибки памяти".
По опыту, возникает ощущение, что в переменную ссылающуюся на поток что то записываеться, но что и кем - не ясно.
vynt вне форума
Старый 21.06.2008, 08:27   #4
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Попробуйте реализовать работу с сокетами на API т.е. без VCL! Думаю все ошибки и вопросы уйдут сами собой.
BOBAH13 вне форума
Старый 24.06.2008, 20:17   #5
vynt
Пользователь
 
Регистрация: 16.05.2008
Сообщений: 17
По умолчанию

Попробовал - возникают проблемы другого рода (со скоростью подключений/отключений).
Иследовал Indy, вообще-то там почти нет VCL
По крайней мере все OnEvent вызываються без использования Sincronize(). Проследил в отладчике где возникает ошибка, окозалось: я назначил свойство - "MaxConnection", и при сробатывании данного условия сервер пытаеться уничтожить поток, а он! либо ещё либо уже не существует. Короче, сбой происходит при вызове системной функции GetCurrentThreadId в TIdThreadMgrDefault. Сложно сказать почему...
Но где копать понятно, всем спасибо!
vynt вне форума
Старый 25.06.2008, 01:26   #6
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

все ясно,сталкивался я с такой проблемой, пытаясь реализовать возможность прерывания работы фоновой процедуры, которая работала именно на движке Indy, в результате я просто подправил исходники Indy (сейчас точно не скажу какой именно модуль). Там выполнялась проверка на то запущен ли еще поток, или нет. И данная проверка не давала корректно завершить поток. Её можно подправить, и у вас все заработает нормально.
Сразу оговорюсь:
Эта правка является необходимой только в конкретной ситуации и не является ошибкой в Indy,ибо она там корректна и по месту, поэтому будьте аккуратней.
Цитата:
Иследовал Indy, вообще-то там почти нет VCL
А причем здесь Indy и VCL? Indy есть обертка для сокетов, причем многие компоненты для универсальности используют row socket, и изучение исходников Indy можно расценивать как учебник.
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи

Последний раз редактировалось Квэнди; 25.06.2008 в 01:28.
Квэнди вне форума
Старый 01.07.2008, 15:09   #7
vynt
Пользователь
 
Регистрация: 16.05.2008
Сообщений: 17
По умолчанию

Вопрос из другой области...
Сколько клиентов может одновремнно подключиться к серверу?
Или, сколько их может быть открыто в одном приложении?
у меня эксперимент даёт число около 1800 :-(
vynt вне форума
Старый 01.07.2008, 21:54   #8
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

один вопрос- одна тема. закрыто
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
передачи файлов через сокеты CHITER Работа с сетью в Delphi 5 09.07.2010 21:55
Сокеты в C++ Builder MDT C++ Builder 3 31.10.2009 18:17
Сокеты ben95 Общие вопросы Delphi 7 09.03.2008 23:26
Сокеты в Delphi Necro Работа с сетью в Delphi 11 24.04.2007 07:32
сокеты cross Работа с сетью в Delphi 2 21.12.2006 18:12