Как создать пару NSInputStream/NSOutputStream, приняв сокет сервера?

Я знаю, что вы можете создать пару NSInputStream и NSOutputStream (бесплатное подключение к CFReadStream, CFWriteStream), открыв клиентское TCP-соединение с помощью CFStreamCreatePairWithSocketToHost согласно Руководство по потоковому программированию.

Как можно создать сервер TCP, который прослушивает порт и принимает соединение в виде пары NSInputStream и NSOutputStream?


person yonran    schedule 13.12.2013    source источник


Ответы (2)


Образец проекта RemoteCurrency предоставляет пример этого в QServer.m (ранее известный как TCPServer.m). Пример кода на самом деле предназначен для настройки рекламы Bonjour, но эту часть можно исключить для простого TCP-сервера.

Вы создаете сокет с собственным обратным вызовом accept, вызывая CFSocketCreate, связать и прослушивать порт, вызвав CFSocketSetAddress и начните получать принятие обратные вызовы, вызвав CFSocketCreateRunLoopSource< /a> с последующим CFRunLoopAddSource.

Затем в обратном вызове accept вы создаете пару NSInputStream/NSOutputStream из дескриптора соединения, используя CFStreamCreatePairWithSocket, установите делегат входного потока и начните получать обратные вызовы recv, вызвав scheduleInRunLoop:forMode:, а затем open< /a> оба потока, чтобы начать их использовать.

Использование NSInputStream и NSOutputStream (в отличие от создания нового потока и вызова стандартных функций UNIX socket, bind, listen, accept, send, recv) позволяют легко получать сетевые события в тот же NSRunLoop, что и остальные API-интерфейсы на основе цикла выполнения в OSX.

person yonran    schedule 07.02.2014

У меня есть пример приложения, которое вы можете загрузить, которое создает пару NSStreams, подключенных через сокет. Затем он передает потоковое видео в реальном времени через разъемы с помощью камеры на устройстве iOS:

Код краток и прост для понимания (не обращайте внимания на дополнительные файлы в проекте; NavController.h/m, PeerConnectionViewController.h/m и CameraViewController.h/m — единственные три релевантных файла):

https://app.box.com/s/fnim5ril4mzu518wj98zy3ah8l83jayv

person James Bush    schedule 21.09.2017