Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Можно ли перевести сокет из блокирующего в неблокирующий режим? [D4, D5, NT4, Win2k, WinXP]


Страницы:   1 2 3

Repeater ©   (2002-11-01 12:46:00) 

Привет!
Такая трабла. Надо бы перевести сокет из блокирующего режима в неблокирующий. Если конкретнее то мне надо сделать такое. Допустим ко мне обращается клиент на серверный сокет. Я в свою очередь создаю блокирующий клиентский сокет и соединяюсь с удаленным сервером. После этого происходит небольшой диалог с удаленным сервером. Диалог состоит в том что я посылаю команды и жду пока сервер ответит. Потом снова посылаю команды и мнова жду ответа. Все это время серверный сокет должен ждать окончания этого диалога, а как только он закончится надо перевести клиентский сокет в неблокирующий режим. Можно такое сделать? Если можно то как?


Repeater   (2002-11-01 16:43:00) [41]

Ну напрямую нельзя указать TClientSocket.ClientType:=ctNonBlockin. Это вызывает ошибку. А если сделать так как ты сказал, то компонент не будет знать, что тип его сокета поменялся и не назначит соответствующие обработчики сообщений. Тогда уж лучше вообще компоненты не использовать а писать все на АПИ.


Digitman   (2002-11-01 16:17:00) [42]

Почему нельзя ? Можно.
Хэндл созданного гнезда всегда доступен чтением соотв.св-ва TCustomWinSocket.SocketHandle. А это как раз то, что требуется одним из обязательных параметров указанных ф-ций.


Repeater   (2002-11-01 16:03:00) [43]

Интересно, а почему тогда в Делфе в ее стандартной компоненте TClientSocket нельзя этого сделать? Они ее до конца не доделали или как?


Digitman   (2002-11-01 13:50:00) [44]

можно. на то и ф-ции эти существуют


Repeater   (2002-11-01 13:42:00) [45]

А что можно уже законекченый сокет перевести из одного состояния в другое не разрывая соединения?


Digitman   (2002-11-01 12:49:00) [46]

см. WSAAsyncSelect(), WSAEventSelect()


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо