TCP / IP - это протокол, который не зависит от ОС, поэтому тот факт, что вы используете XP на сервере, не должен влиять ни на что, кроме возможного использования Windows API для операций с сокетами.
Клаус Брох прав, говоря, что 499 байт выглядит немного меньше для изображения. Вместо этого я предлагаю сначала найти общий размер изображения (в байтах) на сервере, затем отправить это значение в начале потока TCP, а затем данные изображения. На принимающей стороне ваш код должен сначала прочитать это значение размера, выделить немного памяти такого размера, а затем прочитать столько байтов в него. Вы не опубликовали свой серверный код, поэтому я не могу с этим помочь, но клиент может выглядеть примерно так:
unsigned int size = 0; //assumes the size is sent as an int
Byte* recvBuffer;
[iStream read:&size maxLength:sizeof(unsigned int)];
recvBuffer = new Byte[size];
memset(recvBuffer, 0, size);
[iStream read:recvBuffer maxLength:size];
NSData *webdata = [NSData dataWithBytes:recvBuffer length:size];
imageview.image = [UIImage imageWithData:webdata];
delete [] recvBuffer;
Редактировать Мой внутренний C ++ заставил меня использовать новые и удалять. Хотя вы можете использовать это в Obj-C, используя суффикс файла .mm, этот вопрос помечен как Objective-C. Вам следует использовать ответ JeremyP, так как он также включает проверку ошибок и более надежный способ чтения всего изображения.