Vapros za CleintSocket

3 отговора 104 прегледа
#1

Vapros za CleintSocket

Izpadnah v edna mnogo osobena situatsia.

Sazdavam clintsko pilojenie koeto ima SAMO TClientSocket componenta i se optvam da pratya tekstovo saobshtenie na drugo prilojenie v koeto ima TServerSocket componenta po sledniya anchin:

(1) ClientSocket1.Open;
(2) ClientSocket1.Socket.SendText('Test message');
(3) ClientSocket1.Close;

Obache kogato compilera za parvi pat vleze v (1)
ClientSocket1.Active stava True

!!! Ne prashta saobshtenieto i ne zatvarya Socketa (ClientSocket1.Active si ostava true)

Chak pri vtoroto povikvane na functsiyata sadarjashta tezi redove se izprashta saobshtenieto i se Socketa se zatvarya...

Ta vaprosa mi e zashto stava taka i kak moga da go preodoleya?

Za pomoshta vi blagodarya ot sega...

Отговор
в отговор на some #2

Re: Vapros za CleintSocket

Taka e - Osyshtestviava se konekcia
prati go onConnected

Отговор
в отговор на Wizard #3

Re: Vapros za CleintSocket

Mmm

Event onConnecetd nyama za TClientSocket, no sam go probval sas onConnect. Togava me dava greshka Asynchronous Socket Error 10061

Ne moje li da se nameri nyakakvo reshenie...?

Отговор
в отговор на Some #4

Re: Vapros za CleintSocket

Ако си спомням правилно, 10061 означаваше нещо от сорта "Cannot connect to remote socked", т.е. нещо не си задал правилно - я адрес, а порт...

Обаче защо ми се струва, че нещо се объркваш между блокиращия и асинхронния вариант за комуникация? Най-първият ти пример щеше да работи прекрасно, ако сокетите ти бяха блокиращи, а не асинхронни.
Ключовия момент е там, че при асинхронните (както показва и името им) действието на една команда - напр. Connect - може да не е завършило след "излизането" от реда. Т.е. Connect при асинхронните сокети може да се чете като "започни да се свързваш", а не "свържи се". Затова те посъветваха да се закачаш за събития, които се извикват когато действието вече е завършило - а това всъщност е единствения начин за работа с асинхронни сокети.

Библиотеката Indy, която върви с Delphi след версия 6 реализира точно блокиращи сокети - може би на първо време е по-добре да ползваш нея, докато посвикнеш с материала.

Успех.

Отговор