У меня есть клиент-серверное приложение, отправляющее данные с телефона Android на планшет — телефонные звонки, SMS, состояние батареи и т. д. Телефон — это клиент, планшет — сервер, и оба запускают службы с частичными вейклоками для их сохранения. жив достаточно долго, плюс у клиента есть PhoneStateListener и BroadcastReceiver для отслеживания вызовов, состояния батареи и т. д.
Дело в том, что оба конца остаются живы, но на каком-то этапе - по моим настройкам логирования около 20 минут - Клиент сообщает, что у меня "Broken Pipe".
На стороне сервера у меня есть блокирующий сервер в цикле, прослушивающий однобайтовые команды от клиента в потоке, но я также добавил поток, который запускается раз в минуту, чтобы выяснить, что вызывает проблему.
Поскольку клиент обнаруживает сломанный канал, я предполагаю, что есть условие, в котором находится сокет сервера, что вызывает его, но я тестирую следующее:
- Независимо от того, открыт сокет или нет.
- Независимо от того, открыт ли входной или выходной поток,
- Являются ли какие-либо из них нулевыми.
К сожалению, все эти условия в порядке, и соединение
все еще активно. Что я должен искать?
Что я хочу сделать, так это то, что после того, как клиент обнаружит «сломанную трубу», сервер тоже сделает это и попытается повторно подключиться.