Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2002.12.26;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.57 MB
Время: 0.031 c
1-86012
Анатолий
2002-12-16 14:29
2002.12.26
Нужна помощь


1-85933
Дмитрий Е.
2002-12-17 12:41
2002.12.26
Создание окон одного класса в приложении


1-86021
Я
2002-12-16 14:53
2002.12.26
Вопросик


8-86038
kuzmich
2002-09-07 16:08
2002.12.26
PixelCheck в DelphiX


1-85976
KME
2002-12-15 16:31
2002.12.26
PageControl+WebBrowser





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский