Pregunta

Estoy escribiendo una aplicación Cocoa. Hay una toma en la aplicación, y siempre que el enchufe se convierte en legible Quiero leer los datos de la toma, proceso de los datos, y actualizar la interfaz de usuario en consecuencia. Quiero integrar el registro de eventos de lectura en el bucle principal, es decir, quiero conectar el enchufe al bucle principal y tienen la llamada bucle principal de una devolución de llamada cada vez que se toma se convierte en legible.

He escrito una aplicación de prueba, pero por alguna razón no funciona:

#include <stdio.h>
#include <Foundation/NSAutoReleasePool.h>
#include <Foundation/NSRunLoop.h>
#include <Foundation/NSPort.h>

@interface MyDelegate : NSObject <NSPortDelegate> {
}
- (void)handlePortMessage:(NSPortMessage *)portMessage;
@end

@implementation MyDelegate
- (void)handlePortMessage:(NSPortMessage *)portMessage {
    printf("Haiz\n");
}
@end

int
main() {
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    NSSocketPort *server = [NSSocketPort alloc];
    MyDelegate *foo = [MyDelegate alloc];
    [server initWithTCPPort: 1234];
    [server setDelegate: foo];
    [[NSRunLoop mainRunLoop] addPort: server forMode: NSDefaultRunLoopMode];
    [[NSRunLoop mainRunLoop] run];
    [pool release];
    return 0;
}

La aplicación se supone que escuchar en localhost puerto 1234, y cada vez que alguien se conecta al servidor o envía los datos al servidor, se supone que la aplicación para imprimir "Haiz" en la consola. Sin embargo, la aplicación no hace nada en absoluto. La toma se crea y puedo telnet al puerto 1234, pero la aplicación no se imprime nada a la consola.

¿Qué estoy haciendo mal?

¿Fue útil?

Solución

A partir de la documentación:

  

Un objeto NSSocketPort puede ser utilizado como un punto final para las conexiones de objetos distribuidos.

Eso no es lo que están haciendo aquí.

¿Quieres NSFileHandle en torno a un descriptor de archivo de socket de la API de sockets BSD, o a CFSocket . Esto le permitirá colocar el conector en el bucle de ejecución.

Otros consejos

Usted desea utilizar NSSocketPort en la forma en que está haciendo, pero entonces crear un NSFileHandle a aceptar conexiones en el zócalo. Puede obtener devoluciones de llamada en el hilo principal al igual que lo está esperando, primero para nuevas conexiones, y luego para los datos sobre esas conexiones. Utilice esta O'Reilly artículo y simplemente ignorar las cosas HTTP.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top