Самый эффективный способ сделать сеть на Mac / iPhone? - PullRequest
1 голос
/ 24 ноября 2010

Каким был бы самый эффективный способ (то есть лучшее соотношение усилий по сравнению с удобочитаемостью и удобством обслуживания) для установления соединения TCP или отправки дейтаграмм UDP на Mac и iPhone?Я хорошо знаком с классическими разъемами BSD, но сейчас я не стремлюсь к мобильности;Я просто пытаюсь быстро закончить с небольшим проектом.

Я бы хотел иметь оболочку Objective-C от Apple, но хотел бы услышать некоторые мысли о том, что люди обычно делают,Если вы считаете, что BSD-сокеты - это то, что нужно, не стесняйтесь задуматься и о некоторых вещах: мне действительно просто интересно найти «правильный способ» сделать это.

Давайте предположим, что протоколпользовательский, поэтому наши потребности не могут обслуживаться классами HTTP-клиентов на основе какао:)


Моя текущая цель - потоковая передача состояния устройства (например, акселерометра) по сети через UDP при одновременном поддержании сигнализациии событие гарантированной доставки (например, нажатие кнопки) через TCP.Настольное приложение будет отображать этот статус.

Однако мое текущее приложение именно то, что заставило меня задать вопрос;Мне интересно, что люди обычно делают.Когда я последний раз серьезно работал с VB6 7-8 лет назад, элемент управления WinSock ActiveX немного отличался от того, что было сделано с сокетами BSD, независимо от того, что он делал под капотом.

Ответы [ 2 ]

6 голосов
/ 25 ноября 2010

Для работы в сети простой ответ:

(1) ASIHttpRequest ........ ПРИМЕЧАНИЕ - этот QA очень старый. К сожалению, ASIHttpRequest представляет только исторический интерес и больше не доступен.

(2) AsyncSocket

(3) Когда вы начинаете ... GameKit (его может использовать ребенок)

(4) Просто используйте Bonjour (две строки кода), чтобы найти другие устройства.

«Оболочка Objective-C от Apple» ... AsyncSockets (изначально написанная загадочным Дастином Дж. Воссом) настолько ХОРОШО, что Apple просто не потрудится написать один !

AsyncSockets - это именно то, что вам нужно. Он используется повсеместно в 300 000 приложений iFone. Это «есть» сеть на iFone. Надеюсь, это поможет.

СНОВА ПРИМЕЧАНИЕ - этот QA очень старый. Теперь вы можете легко найти «современные версии» программного обеспечения, такие как AsyncSockets.

Кстати, ничего не стоит, в этом нет абсолютно ничего плохого - вообще - только с использованием GK ... производительность может быть впечатляющей. Единственным недостатком является то, что спаривание просто занимает много времени с GK. И это детский беспорядок, созданный для десятилетних детей, обучающихся программированию. Вы сможете в 100 раз быстрее соединиться, работая напрямую с AsyncSockets.

Вы можете предпочесть использовать игрушечный код GK, пока вы выясняете Bonjour и все такое.

Я хотел бы предположить, что единодушное мнение заключается в том, что нет смысла работать на еще более низком уровне (то есть с необработанными сокетами), чем в AsyncSocket ... там не так много производительности, чтобы иметься.

ПРИМЕЧАНИЕ - если вы новичок в gamekit / iOS, обязательно прочитайте этот критический совет!
Клиент / сервер GKSessions

надеюсь, это поможет.

1 голос
/ 24 ноября 2010

На ваш вопрос не может быть дан точный ответ, потому что вы не описали, что хотите сделать.Лучший ответ, который я могу дать, - прочитать вводные руководства по работе с сетями для Mac и iOS .

Обновление

Iне думайте, что есть какой-либо «простой способ какао», встроенный для UDP.Я помню, что это обсуждение несколько раз появлялось в списке разработчиков какао.Проект cocoaasyncsocket упоминался в разных местах.Он утверждает:

AsyncUdpSocket - это сетевая библиотека сокетов UDP / IP, которая упаковывает CFSocket.Он работает почти так же, как версия TCP, но разработан специально для UDP.Это включает в себя неблокирующие операции отправки / получения в очереди, полную поддержку делегатов, основанный на цикле выполнения, автономный класс и поддержку IPv4 и IPv6.

...