Собственные системные процедуры iPhone (датаграмма-сокет) - PullRequest
2 голосов
/ 30 мая 2011

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

NSFileHandle в настоящее время обрабатывает только связь через потоковый тип Розетки. Если вы хотите использовать дейтаграммы или другие типы розеток, вы должны создавать и управлять соединением, используя стандартные системные процедуры.

Процесс на одном конце канал связи (сервер) начинается с создания и подготовки сокет с использованием системных процедур. Эти подпрограммы немного различаются между BSD и не-BSD системы, но состоят из та же последовательность шагов:

  1. Создание потокового сокета определенный протокол.

  2. Привязать имя к сокету.

  3. Добавление себя в качестве наблюдателя NSFileHandleConnectionAcceptedNotification.

  4. Отправка acceptConnectionInBackgroundAndNotify к этому файлу обрабатывать объект.

    Этот метод принимает соединение в фон, создает новый NSFileHandle объект из нового дескриптора сокета, и отправляет NSFileHandleConnectionAcceptedNotification.

Теперь я увидел ответ Майкла. О различиях между сокетом типа «поток» и типом сокета «датаграмма»

У вас есть пример реализации iPhone для стандартных системных процедур (датаграмма-сокет-тип)?

1 Ответ

2 голосов
/ 31 мая 2011

Хорошо, сначала я нашел то, что мне было нужно, с помощью API CFSocket, который позволит мне реализовать синхронизацию UDP.

CFSocket API

Сокеты - это самый базовый уровень сетевых коммуникаций. Розетка действует аналогично телефонной розетке. Он позволяет вам подключаться к другому сокету (локально или по сети) и отправлять данные в этот сокет.

Самая распространенная абстракция сокетов - это BSD-сокеты. CFSocket - это абстракция для сокетов BSD. CFSocket обеспечивает практически все функциональные возможности сокетов BSD и обеспечивает минимальные издержки и интегрирует сокет в цикл выполнения. CFSocket не ограничивается потоковыми сокетами (например, TCP), он может обрабатывать сокеты любого типа.

Вы можете создать объект CFSocket с нуля, используя функцию CFSocketCreate, или из сокета BSD, используя функцию CFSocketCreateWithNative. Затем вы можете создать источник цикла выполнения, используя функцию CFSocketCreateRunLoopSource, и добавить его в цикл выполнения с помощью функции CFRunLoopAddSource. Это позволит запускать функцию обратного вызова CFSocket всякий раз, когда объект CFSocket получает сообщение.

Независимо от того, я нашел AsyncSocket API.

CocoaAsyncSocket поддерживает TCP и UDP. Класс AsyncSocket предназначен для TCP, а класс AsyncUdpSocket - для UDP. Каждый класс описан ниже.

AsyncSocket - это сетевая библиотека сокетов TCP / IP, которая связывает CFSocket и CFStream. Он предлагает асинхронную операцию и собственный класс какао с поддержкой делегатов. Вот ключевые особенности:

Неблокирующее чтение и запись в очереди с необязательными таймаутами. Вы говорите ему, что читать или писать, и он позвонит вам, когда это будет сделано. Автоматическая приемка розеток. Если вы скажете ему принимать соединения, он будет вызывать вас с новыми экземплярами для каждого соединения. Конечно, вы можете отключить их немедленно. Поддержка делегатов. Ошибки, соединения, принятие, чтение завершений, запись завершений, выполнение и разъединения - все это приводит к вызову вашего метода делегата. На основе цикла выполнения, а не на основе потока. Хотя вы можете использовать его в основном или рабочем потоке, вам это не нужно. Он вызывает методы делегата асинхронно, используя NSRunLoop. Методы делегата включают параметр сокета, позволяющий различать множество экземпляров. Автономный в одном классе. Вам не нужно возиться с потоками или розетками. Класс обрабатывает все это. Поддержка потоков TCP через IPv4 и IPv6. Библиотека является общественным достоянием, изначально написана Дастином Воссом. Теперь доступно в публичных местах, чтобы разрешить и поощрять его постоянную поддержку.

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

CocoaAsyncSocket

А вот ссылка на CFSocket

Ссылка на CFSocket

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