Objective-C NSMutableArray сокетов? - PullRequest
       4

Objective-C NSMutableArray сокетов?

0 голосов
/ 12 августа 2010

Я хочу сохранить пару сокетов в ArrayList / NSMutableArray, но сокеты имеют тип int, а NSMutableArray принимает только объекты (id).Есть ли другой тип данных, который я могу использовать в качестве контейнера для сокетов?Я не уверен, сколько у меня будет записей, поэтому я хотел бы, чтобы контейнер данных был похож на ArrayList.

Спасибо!

РЕДАКТИРОВАТЬ: я пытался отправить сокет какNSNumber, но он не работал и вызвал сбой XCode, когда я попытался отправить сообщение через сокет.

Ответы [ 2 ]

6 голосов
/ 12 августа 2010

Вы должны заключать дескрипторы файлов в экземпляры NSFileHandle, они будут хорошо воспроизводиться внутри объектов коллекции, таких как NSArray, и предназначены для обтекания дескрипторов файлов, таких как сокеты. Они также позволяют вам использовать стандартные типы Foundation, такие как NSData в сочетании с вашим общением.

int s = socket(AF_INET, SOCK_STREAM, 0);

if (s != -1)
{
    // bind or connect to address

    NSFileHandle *mySock = [[NSFileHandle alloc] initWithFileDescriptor:s closeOnDealloc:YES];

    [myMutableArray addObject:mySock];
}

Обратите внимание, что NSFileHandle также предоставляет удобные методы для приема соединений асинхронно, а также асинхронного ввода-вывода. Вы можете получить исходный дескриптор файла, используя метод fileDescriptor.

1 голос
/ 12 августа 2010

Вы можете заключить свой int в NSNumber как:

NSNumber *socket = [NSNumber numberWithInt:socketInt];
[myArray addObject:socket];
NSNumber *getSocket = [myArray objectAtIndex:0];
int getSocketInt = [getSocket intValue];

Подробнее здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...