Мое приложение взаимодействует с сервером через TCP, используя AsyncSocket. Возможны две ситуации, в которых происходит общение:
Приложение что-то отправляет на сервер, сервер отвечает. Приложению необходимо прочитать этот ответ и что-то сделать с содержащейся в нем информацией. Этот ответ всегда имеет одинаковую длину, например, ответ всегда 6 байт.
Приложение «бездействует», и сервер в какой-то момент (неизвестный приложению) инициирует связь. Приложение должно прочитать все, что отправляет сервер (может быть любое количество байтов, но первый байт будет указывать, сколько байтов следует, чтобы я знал, когда прекратить чтение) и обработать эту информацию.
Первая ситуация работает нормально. readDataToLength:timeout:tag
возвращает то, что мне нужно, и я могу делать с этим то, что хочу. Это вторая ситуация, которую я не знаю, как реализовать. Я не могу использовать readDataToLength:timeout:tag
, так как заранее не знаю длину.
Я думаю, что мог бы что-то сделать с readDataWithTimeout:tag:
, установив тайм-аут на -1. Я полагаю, что это заставляет сокет постоянно прослушивать все, что приходит. Однако это, вероятно, помешает данным, поступающим в ответ на то, что я отправил (ситуация 1). Приложение больше не может отличать входящие данные от ситуации 1 или ситуации 2.
Кто-нибудь здесь, кто может помочь мне решить эту проблему?