AsyncSocket Delay - PullRequest
       29

AsyncSocket Delay

0 голосов
/ 25 июня 2010

Итак, я пишу приложение для своего iphone, которое подключается к моему компьютеру, на котором запущено приложение Java, используя AsyncSocket. На стороне java он должен распечатать «Ok», когда iPhone подключается к серверу. Я также добавил команду sleep () на сторону iphone, поэтому после подключения к серверу он отправляет некоторые данные и затем спит в течение 5 секунд. Но на стороне java все данные, включая «Ok» и данные, распечатываются ПОСЛЕ команды sleep. Так что, как будто iphone не подключается, пока не закончится выполнение программы. Может кто-нибудь, пожалуйста, помогите мне? Спасибо ...

Ответы [ 2 ]

1 голос
/ 07 мая 2011

Причина, по которой вы видите эту проблему, заключается в том, что AsyncSocket выполняется асинхронно в цикле выполнения, но когда вы вызываете sleep (), вы блокируете цикл запуска, который пытается выполнить AsyncSocket.

Когда вы вызываете [asyncSocket connectToHost: ...], метод немедленно возвращается и попытка подключения продолжается в фоновом режиме. Метод делегата уведомит вас о том, когда будет установлено соединение. Но код, который завершает настройку соединения (в AsyncSocket), также должен запускаться в цикле выполнения.

Аналогично, когда вы вызываете [asyncSocket writeData: ...], метод сразу возвращается. Код, который отправляет эти данные, планируется запустить в цикле выполнения сокета. Но если вы вызываете sleep (), вы запрещаете выполнение этого кода.

1 голос
/ 25 июня 2010

AsyncSocket предназначен, чтобы быть огнем и забыть. Вы не должны ждать, пока что-нибудь случится. Вся цель этого класса - выполнить задание в фоновом режиме, а затем уведомить вас, когда это будет сделано. Если вам нужен блокирующий сокет, используйте другое.

...