У меня есть экземпляр AsyncSocket, который я использовал в качестве сервера на iPad, а затем сокет AsyncSocket, работающий на другом iPad, который действует как клиент. У меня есть весь необходимый код для обмена данными между клиентом и сервером — там проблем нет.
Проблема, с которой я сталкиваюсь, заключается в том, что все работает нормально, но во время тестирования ошибок моего приложения я заметил одну особенно странную (и раздражающую проблему):
Если я выключу сервер iPad (в этот момент ни один из делегатов сокета не запустится на сервере), клиент отключится (и войдет в созданный мной цикл, в котором он постоянно повторяет попытки). Что раздражает, так это то, что даже когда сервер возвращается, клиент все равно не может к нему подключиться. На самом деле, даже если я снова запущу клиент с нуля, он все равно не сможет подключиться к серверу. Мне нужно перезапустить серверное приложение, чтобы клиент снова смог подключиться.
Странно то, что эта ошибка возникает только тогда, когда сервер фактически выключается (т.е. переводится в режим ожидания) с помощью кнопки вверху. Если я просто отправлю приложение в фоновый режим с помощью кнопки «Домой», клиент все равно сохранит свое соединение с сервером: только когда устройство отключено, клиент получает сообщение об отключении делегата и отключается, а затем отказывается повторно подключаться. Тем временем сервер совершенно не обращает на это внимания, и никакие методы-делегаты вообще не запускаются.
Обобщая мой вопрос:
- Что именно происходит с экземпляром сервера AsyncSocket, когда устройство переводится в режим ожидания с помощью кнопки в верхней части iPad?
- Почему никакие методы делегата не запускаются, но все подключенные клиенты отключаются?
- Что происходит, когда устройство снова включается?
- Почему клиенты не могут повторно подключиться?