Вы в основном правильно помещаете вещи в объект NSData, но неправильно используете их с функцией send
. Прежде всего, как предполагает dreamlax, используйте инициализатор NSMutableData -initWithCapacity
, чтобы получить емкость, а не обнуляемые байты.
Ваш data
указатель является указателем на объект Objective-C (NSData), а не фактическим необработанным байтовым буфером. Функция send
является классической функцией UNIX-y C и ничего не знает об объектах Objective-C. Ожидается указатель на фактические байты:
send(sock, [data bytes], [data length], 0);
Также, FWIW, обратите внимание, что здесь важен порядок байтов, если вы ожидаете восстановить многобайтовые поля на сервере. Рассмотрите возможность использования HTONL
и HTONS
для значений short и int, прежде чем помещать их в буфер NSData, предполагая, что сервер ожидает «сетевой» порядок байтов для своего формата пакета (хотя, возможно, вы управляете этим).