Этот метод делегата действительно будет вызван, когда сокет завершит чтение данных.Недостающая часть уравнения сообщает AsyncSocket
, когда полученные данные завершены.У него нет понимания данных, которые вы пытаетесь получить, вы должны сказать об этом - как вы уже упоминали в своем последнем вопросе.
Вот где действительно сияет AsyncSocket
.Вы действительно можете отправить изображение с префиксом его длины и позволить классу творить чудеса.Ваш код будет выглядеть примерно так:
[sock readDataToData:[AsyncSocket CRLFData] withTimeout:0 tag:kLengthTag];
В вашем методе делегата:
- (void)onSocket:(AsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag {
if (tag == kLengthTag) {
NSUInteger length = /* read length out of nsdata */;
[sock readDataToLength:length withTimeout:0 tag:kImageTag];
} else if (tag == kImageTag) {
/* hurray, you have your image! */
}
}
Конечно, если вы передаете достаточно большие изображения, вы можете отслеживатьваш прогресс.Для этого есть метод экземпляра -[AsyncSocket progressOfReadReturningTag:bytesDone:total:]
.Также есть метод делегата -[id<AsyncSocketDelegate> onSocket:didReadPartialDataOfLength:tag:]
.