Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.12.26;
Скачать: CL | DM;

Вниз

Сокеты   Найти похожие ветки 

 
VirginKiller   (2002-10-30 11:28) [0]

Есть два компонента: ClientSocket и ServerSocket. ServerSocket.ServerType = stThreadBlocking, у клиента тоже самое. Проблема в том, что при выполнении ClientSocket.Close (Active := False) в приложении клиенте цикл while (not terminated) and ClientSocket.Connected в ClientExecute процесса сервера продолжает выполняться, т.е. ClientSocket.Connected не реагирует на ручное отключение клиента. Как бы это можно было побороть?


 
Digitman   (2002-10-30 11:36) [1]

1. TClientSocket не имеет св-ва stThreadBlocking.
2. Тело ClientExecute() должно само устанавливать св-во ClientSocket.Connected = False при возникновении исключительных ситуаций , связанных с отказом трансаорта из-за разрыва соединения по инициативе клиента


 
virginkiller   (2002-10-30 12:08) [2]

1. Ну да, там просто stBlocking.
2. Хорошо, а как узнать, что клиент отсоединился, если в это время ничего не передается?


 
Digitman   (2002-10-30 12:29) [3]

А как вообще ты узнаешь, что "в это время" что-то "передается" ?


 
VirginKiller   (2002-10-30 12:58) [4]

:-) Хорошо. Рассмотрим ситуацию, которую я в начале описывал - тело ClientExecute имеет только цикл. Клиент подключился, процесс создался, все замечательно.. И клиент отключается. Как узнать, что он отключился?


 
Digitman   (2002-10-30 13:09) [5]

А зачем такой цикл нужен ? Пустой ?)
В нем должны быть вызовы различных транспортно-диспетчерских ф-ций гнезда сервера, ассоциированного с данным коннектом

Если коннект по каким-то причинам разорван, то ф-ции возвращают отказ, который и нужно анализировать, и по результатам анализа выполнять ClientSocket.Connected = False (если код отказа фиксирует факт невозможности дальнейшей работы с транспортным каналом)


 
VirginKiller   (2002-10-30 14:02) [6]

Понятно.. :-) Хорошо, а не подскажешь, как лучше решить проблему обмена информацией в оба направления одновременно. Я пока думаю, клиентом подключаться сразу двумя сокетами и при коннекте говорить, кто он такой и какой сокет для чего. Может, есть решение лучше, для меня эта тема вообще темный лес. :-)


 
Digitman   (2002-10-30 14:18) [7]


> клиентом подключаться сразу двумя сокетами


Ни к чему это. После того, как клиент и сервер достоверно установили соединение, в каждый момент времени кадый из них может являться как приемником, так и передатчиком сообщений (вне зависимости, кто из них кто).
Для передачи сообщений используются Send-методы объекта TCustomWinSocket, для приема - Receive-методы.


 
VirginKiller   (2002-10-30 14:33) [8]

Но могут ли они одновременно и посылать и принимать?


 
Digitman   (2002-10-30 14:45) [9]

Опять же - ни к чему это.
Достаточно установить асинхронный неблокирующий режим работы гнезда



Страницы: 1 вся ветка

Текущий архив: 2002.12.26;
Скачать: CL | DM;

Наверх




Память: 0.46 MB
Время: 0.006 c
6-86065
Romych
2002-10-21 20:04
2002.12.26
Надежность - UDP


14-86103
dimich1978
2002-12-05 13:43
2002.12.26
Для тех кто любит интерфейс ХР


14-86105
KSergey
2002-12-04 15:18
2002.12.26
Настройка прав доступа к свойствам IE


1-85937
AVR
2002-12-16 22:30
2002.12.26
XPath, IDOMNode, IDOMElement


14-86126
Vetal119
2002-12-05 14:47
2002.12.26
Взлом HASP





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский