Socketi v Delphi!!!
От: dammit  
Дата: 11.11.02 11:14
Оценка:
pri sozdanii prostoj programmi obmena dannimi 4erez socketi posle popitki soedinenija
clienta s serverom u menja viletaet soobsenie "asynchronous socket error 10049"
podskazite kak etogo izbezatj dobrie ljudi... i zaodno objasnite plzzz tolkovo 4to zna4it sinhronij i asynhronnij rezimi VSE!!! zaranie blagodaren...
Re: Socketi v Delphi!!!
От: Fantasist  
Дата: 15.11.02 20:01
Оценка:
Здравствуйте, dammit, Вы писали:

Ошибка 10049:
WSAEADDRNOTAVAIL The specified address is not available from the local machine.

Короче, адрес не доступен. Избежать, этого, наверное, так, чтобы подключаться к доступному адресу.

Синхронные сокеты — это сокеты которые блокируют поток во время своей работы. То есть например, он устанавливает соеденение и ты даешь ему команду прочитать чего-нибудь из соеденения, так вот если читать нечего то он не будет возвращатся из этой функции пока что-нибудь не появиться прочитать. Если ты не создал отдельный поток для чтения, к тебя он будет читать в главном потоке, и значит твоя программа "замерзнет" до того момента, пока сокет не сможет что-нибудь прочитать. Синхронный сокет правда тоже можно пометить как не блокирующий. Тогда если он не может выполнить данную команду немедленно (т.е. например, не может прочитать из соеденения, так как данных никаких не пришло), он будет возвращать соответсвующую ошибку — WSAEWOULDBLOCK.

Асинхроные — это слегка другие звери для них можно определить виндосовское окно, которое будет получать соответсвующие сообщения от системы, если происходит какая-то активность этого сокета. То есть с ним тебе не надо давать команду "читать" и ждать пока это не станет возможно, а достадочно обработать соотвествующиее сообщение от виндос, которое как раз и скажет, что теперь из этого сокета можно прочитать, т. е. данные уже пришли. Тогда ты смело их читаешь.

P.S. Сокеты в Delphi, после некоторой работы с ними, мне не понравились. Слишком у них сильно закрученно и работает кривовато. Поэтому пишу свои клиенты и серверы.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.