Este gran tutorial explica bien este tema: Cliente de iPhone para multijugador con NSStreams.
Actualización: para evitar molestias con su propia implementación de sockets, intente usar square / SocketRocket
Manera Hardcore:
Supongo que su pregunta es más general y no se limita a Netty … así que en iOS puede usar NSStreams. Aquí hay una guía Introducción a la Guía de programación de Stream para Cocoa.
- ¿Cómo reconoce Shazam las canciones?
- ¿Cuáles son algunos de los mejores accesorios para un iPhone?
- ¿Qué es 'subview' en iOS?
- ¿Por qué aparecen las revisiones de una versión anterior de mi aplicación en App Store?
- ¿Cuáles son las mejores prácticas para identificar UITableViewCell?
La idea es que programe NSStream en el ciclo de ejecución y espere las devoluciones de llamada.
En Mac OS tiene un método + getStreamsToHost:port:inputStream:outputStream:
que le proporciona flujos de entrada y salida. De manera predeterminada, en iOS, este método no está implementado, pero puede usar el nivel C inferior para obtenerlos y enviarlos a NSStream, o usar la categoría de listo de este Q&A de Apple: Uso de NSStreams para una conexión TCP sin NSHost.
@interface NSStream (QNetworkAdditions)
+ (nulo) qNetworkAdditions_getStreamsToHostNamed: (NSString *) hostName
puerto: puerto (NSInteger)
inputStream: (fuera NSInputStream **) inputStreamPtr
outputStream: (fuera NSOutputStream **) outputStreamPtr;
@fin
@implementation NSStream (QNetworkAdditions)
+ (nulo) qNetworkAdditions_getStreamsToHostNamed: (NSString *) hostName
puerto: puerto (NSInteger)
inputStream: (fuera NSInputStream **) inputStreamPtr
outputStream: (fuera NSOutputStream **) outputStreamPtr
{
CFReadStreamRef readStream;
CFWriteStreamRef writeStream;
afirmar (hostName! = nil);
afirmar ((puerto> 0) && (puerto <65536));
afirmar ((inputStreamPtr! = NULL) || (outputStreamPtr! = NULL));
readStream = NULL;
writeStream = NULL;
CFStreamCreatePairWithSocketToHost (
NULO,
(__bridge CFStringRef) hostName,
Puerto,
((inputStreamPtr! = NULL)? & readStream: NULL),
((outputStreamPtr! = NULL)? & writeStream: NULL)
);
if (inputStreamPtr! = NULL) {
* inputStreamPtr = CFBridgingRelease (readStream);
}
if (outputStreamPtr! = NULL) {
* outputStreamPtr = CFBridgingRelease (writeStream);
}
}
@fin