Форум: "Сети";
Текущий архив: 2004.05.16;
Скачать: [xml.tar.bz2];
ВнизЗакрытие клиентского приложения приводит к закрытию сервера Найти похожие ветки
← →
hair_fly (2004-03-30 12:06) [0]Уважаемые мастера, возникла следующая проблема:
Есть клиентское и серверное приложение, которые общаются по 10-20 портам (используются компоненты TClientSocket и TServerSocket). Если запустить на одном компе и клиент и сервер, установить сокетные соединения, то при закрытии клиента процесс серверного приложения просто убивается (естественно такая реакция не программировалась :). Причем это происходит не всегда.
Если запустить сервер и клиент на разных компах, то такого эффекта (почти?) никогда нет.
Подскажите пожалуйста, в чем может быть проблема и как с этим бороться ?
← →
Digitman © (2004-03-30 12:40) [1]
> в чем может быть проблема
в ошибках программной логики, реализованной тобой в серв.приложении
> как с этим бороться ?
1. заняться отладкой-трассировкой серв.стороны
2. добавить протоколирование искл.ситуаций на серв.стороне
← →
hair_fly (2004-03-30 13:08) [2]дело в том, что приложение сервера закрывается не выдавая никаких сообщений об ошибках. Компонент TApplicationEvents никаких исключений не ловит. Если сервер запускали под отладчиком, то отладчик тоже никаких исключений не показывает. Такое ощущение, что какой-то сервис просто убивает мой процесс, ничего никому не говоря.
← →
hair_fly (2004-03-30 13:59) [3]Собственно всвязи с данной проблемой возник еще один вопрос. В Delphi7 компоненты TClientSocket и TServerSocket заменили на TcpClient и TcpServer. О причинах этого я не смог найти никакой более менее вразумительной информации. Например в книге Марко Кэнту Mastering Delphi7 написано:
"Компоненты TcpClient и TcpServer были созданы для замены компонентов TClientSocket и TServerSocket, использовавшихся в прежних версия Delphi. Сейчас сомпоненты TClientSocket и TServerSocket объявлены устаревшими, и Borland предлагает использовать вместо них компоненты Indy (!!!)."
Более подробной информации в литературе найти не удалось.
Может кто-нибудь поделится сакральным знанием, что же не так в старых компонентах ? И что лучше использовать (и почему) в качестве замены старых компонентов - Indy или новые компоненты от Borland ?
← →
Algol (2004-03-30 14:13) [4]
> Может кто-нибудь поделится сакральным знанием, что же не
> так в старых компонентах
По правде говоря я вообще удивляюсь, как на этих компонентах можно что-то было делать. У меня они никогда нормально не работали.
← →
Polevi © (2004-03-30 14:25) [5]>Algol (30.03.04 14:13) [4]
прошу прощения, а у вас вообще что-нибудь нормально работало ?
у меня никаких проблем при использовании TXXXSocket не было, хорошая обертка Winsock
>hair_fly (30.03.04 13:59) [3]
> что же не так в старых компонентах ?
все в них "так", используй на здоровье
← →
Digitman © (2004-03-30 15:11) [6]
> hair_fly (30.03.04 13:08) [2]
> В Delphi7 компоненты TClientSocket и TServerSocket заменили
> на TcpClient и TcpServer
не заменили. TClientSocket и TServerSocket так же присутствуют в поставке, но убраны с палитры.
> приложение сервера закрывается не выдавая никаких сообщений
> об ошибках. Компонент TApplicationEvents никаких исключений
> не ловит
тем не менее факт критического исключения - налицо
без проблемного кода сложно что-либо сказать
> что же не так в старых компонентах ?
все там "так", нет никаких проблем
> Algol (30.03.04 14:13) [4]
> По правде говоря я вообще удивляюсь, как на этих компонентах
> можно что-то было делать. У меня они никогда нормально не
> работали.
кривизна рук и головы не есть оправдание "ненормальности" работы этих компонентов
замечательно работают они, несмотря на некоторые недоработки Борланда в части скупости хэлпа и удобства/особенностей использования событийных интерфейсов этих компонентов
← →
Algol (2004-03-30 15:18) [7]
> кривизна рук и головы не есть оправдание "ненормальности"
> работы этих компонентов
Спасибо конечно за комплимент, но я высказал свое мнение. Ваше право с ним не согласится.
← →
Digitman © (2004-03-30 15:38) [8]
> Algol
готов ли ты привести конкретные аргументы в пользу утверждения [4] ?
← →
Algol (2004-03-30 15:44) [9]
> готов ли ты привести конкретные аргументы в пользу утверждения
> [4]
А что, тот факт что борланд убрал эти компоненты с палитры, это не весомый аргумент?
← →
Digitman © (2004-03-30 15:47) [10]
> Algol (30.03.04 15:44) [9]
это не аргумент, а ничем необоснованные доводы, которыми ты хочешь "отмазаться"
← →
hair_fly (2004-03-30 16:31) [11]
> Digitman © (30.03.04 15:11) [6]
> не заменили. TClientSocket и TServerSocket так же присутствуют
> в поставке, но убраны с палитры.
Да это понятно :)
> тем не менее факт критического исключения - налицо
> без проблемного кода сложно что-либо сказать
Вся проблема в том, что не понятно где именно в коде проблема, а постить здесь весь код программы смысла нет - он довольно объемен (несколько тысяч, а то и десятков тысяч строк) и слишком сложен, чтобы кто-то с ним стал здесь разбираться.
Возможно имеет смысл найти причины, почему ВООБЩЕ возможен terminate процесса без каких-либо сообщений об ошибке...
> все там "так", нет никаких проблем
Вобщем раньше проблем с этими компонентами не возникало - эти мои приложения нормально работают, причем через любые каналы связи...
Но ведь Borland не от нечего делать написал им замену. Вот и интересна их мотивация этого.
← →
Verg © (2004-03-30 16:39) [12]
> Но ведь Borland не от нечего делать написал им замену. Вот
> и интересна их мотивация этого.
Кроссплатформа. На Linux-е в принцие не изобразить тот асинхронный механизм, который есть в WinSock и вовсю используется TClient[Server]Socket.
> почему ВООБЩЕ возможен terminate процесса без каких-либо
> сообщений об ошибке...
Это к WINAPI. Сделай где-нибудь, например, halt(0) или ExitProcess в какой-нибудь процедуре - вот тебе и "terminate молчком"
← →
Digitman © (2004-03-30 16:42) [13]
> Вот и интересна их мотивация этого
а какова, как думаешь, их мотивация свистопляски с версиями ?
хочется им быть "на передовой" ... а как иначе ? ..
бросил на форму иконку с каким-нить FTPServer и - хрясь ! - готово) ... пара "батонов" - и настоящий супер-пупер-мега-сервер готов) ... це ж - среда быстрой (!!!) разработки бизнес-приложений ! ... нашута, спрашивается, некоему тинейджеру париться со станд. прикл.протоколом инф.обмена на базе абсолютно "голого" транспорта а-ля TClient/SerberSocket, если Борланд, утирая ему сопЕльки, говорит, мол, не плачь, вот тебе готовый "калач", кинь на форму и готово ?
← →
Verg © (2004-03-30 16:44) [14]
> > почему ВООБЩЕ возможен terminate процесса без каких-либо
>
> > сообщений об ошибке...
> Возможно имеет смысл найти причины,
Какие-то грубейшие ошибки в твоем коде, или в коде использованных тобою компонент/библиотек сторониих производителей.
Напиши простейший пример, который делает так же, раз нет смысла выкладывать весь код. Смоделируй ситуацию так, чтобы ее уже можно было "предъяаить", воспроизвести не только тебе. а иначе - пустой базар, пардон.
← →
hair_fly (2004-03-30 16:46) [15]
> Verg © (30.03.04 16:39) [12]
> Это к WINAPI. Сделай где-нибудь, например, halt(0) или ExitProcess
> в какой-нибудь процедуре - вот тебе и "terminate молчком"
Вот я об этом и спрашиваю, где такое может происходить ? В моем коде ничего подобного нет, а значит может быть в чужом коде (Borland?)... Или другой вариант: по каким-то причинам некий сервис молча делает TerminateProcess. Если так, что почему ?
← →
Verg © (2004-03-30 16:48) [16]
> Если так, что почему ?
Нет, не так. Не надо "перевишивать дурных собак".
← →
Digitman © (2004-03-30 17:14) [17]
> некий сервис молча делает TerminateProcess
не думаю, что какому-то сервису есть хоть малейшее дело до твоего приложения
где-то ты, очевидно, не учитываешь особенности сетевого транспорта при тех или иных сет.условиях, в рез-те чего гнездовые операции чтения/записи, возможно, "лезут" в чужую область памяти и модифицируют ее содержимое, что и приводит к печальным последствиям для процесса в целом
Страницы: 1 вся ветка
Форум: "Сети";
Текущий архив: 2004.05.16;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.032 c