tls puertos listado failed error iphone sockets connection communication

puertos - iPhone TCP/IP Socket Server/Programa de cliente



tls error tls handshake failed openvpn windows (3)

Esperaría que quisieras que tu servidor ya se haya iniciado, y entonces solo necesitarías un botón "Conectarse al Servidor", y luego tu "Ping". De lo contrario, necesita un proceso separado en su cuadro de servidor que responde al mensaje "Iniciar servidor" e inicia el servidor.

He leído muchas preguntas sobre este tema en este sitio web, sin embargo, no respondieron mi pregunta en silencio. Si no puede ser ### sobre mi objetivo o fondo, salte a la pregunta.

Mi meta

Es construir un servidor que pueda ejecutarse en Mac OS X 10.4+ y más tarde, portarlo a Windows XP / Vista (no tengo idea de cómo hacerlo, pero eso es un problema para más adelante).

Luego, deje que el iPhone sea el cliente que pueda ver los nombres de las computadoras que están ejecutando el servidor (a través de WiFi). El usuario del iPhone puede seleccionar el nombre de la computadora para conectarse al servidor en esa computadora.

Después de eso, pueden enviar mensajes de texto simples entre ellos. Por ejemplo, el iPhone envía ''Knock Knock'' y el servidor responde ''¿Quién está allí?''. O un cliente simple: ''Ping'', el servidor responde que ''Pong'' funcionará bien.

Fondo

He trabajado con sockets en el pasado, pero solo en Visual Basic 6 con WINSOCKET.dll fue muy fácil crear un servidor TCP / IP.

server.host = localhost; server.port = 12203; server.listen();

Con el cliente solo necesitaba hacer lo siguiente para conectarme.

client.connect(localhost, 12203);

Hubo algunas devoluciones de llamadas disponibles como connect, close, dataArrival, etc. que pude usar para hacer lo que quisiera.

Tal vez para el iPhone haya bibliotecas escritas para él, ¿pero es tan difícil crear esta sencilla aplicación usted mismo? Después de hacer algunas investigaciones, entiendo que tengo que buscar en el área de CFNetwork, CFHost, CFSocket, CFStream.

Pregunta

¿Hay alguien que pueda guiarme a un tutorial o publicar el código donde tiene dos botones en el iPhone? [Iniciar servidor] y [Conectar al servidor] donde el primero iniciará un servidor TCP / IP en un puerto determinado y el segundo se conectará a él.

Después de que se haya realizado una conexión, tal vez también el código para enviar un simple mensaje de ''Ping'' al servidor después de que el servidor lo reciba, responde con un mensaje ''Pong'' al cliente.

Eso sería realmente útil. Pero quizás estoy pidiendo mucho aquí.


Recomiendo lo siguiente: Socket Async Cocoa

También hay un proyecto de ejemplo básico en el sitio para que comiences. He tenido mucho éxito trabajando con ese marco.


este tutorial para crear una aplicación de muestra de chat funciona muy bien y es bastante sencillo (cualquier novato de iphone, como yo, puede hacer que funcione, INCLUSO EN EL MODO SIMULADOR se conecta al servidor de socket externo).

Lo adapté para hablar de mi servidor de socket y funciona como un encanto. este es el código de prueba, por lo que no hay una preocupación real con los cabos sueltos. solo envía un mensaje (su ID de inicio de sesión) y recibe una respuesta, que se muestra en la consola.

// // ViewController.m // zdelSocketTest01a // // #import "ViewController.h" @implementation ViewController @synthesize inputNameField; @synthesize joinView; - (void)initNetworkCommunication { uint portNo = 5555; CFReadStreamRef readStream; CFWriteStreamRef writeStream; CFStreamCreatePairWithSocketToHost(NULL, (CFStringRef)@"227.3.4.56", portNo, &readStream, &writeStream); inputStream = (__bridge NSInputStream *)readStream; outputStream = (__bridge NSOutputStream *)writeStream; [inputStream setDelegate:self]; [outputStream setDelegate:self]; [inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode]; [outputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode]; [inputStream open]; [outputStream open]; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Release any cached data, images, etc that aren''t in use. } #pragma mark - View lifecycle - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. [self initNetworkCommunication]; messages = [[NSMutableArray alloc] init]; } - (void)viewDidUnload { [self setInputNameField:nil]; [self setJoinView:nil]; [self setJoinView:nil]; [super viewDidUnload]; // Release any retained subviews of the main view. // e.g. self.myOutlet = nil; } - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; } - (void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; } - (void)viewWillDisappear:(BOOL)animated { [super viewWillDisappear:animated]; } - (void)viewDidDisappear:(BOOL)animated { [super viewDidDisappear:animated]; } - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { // Return YES for supported orientations return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown); } - (IBAction)joinChat:(id)sender { NSString *response = [NSString stringWithFormat:@"logon,%@", inputNameField.text]; NSData *data = [[NSData alloc] initWithData:[response dataUsingEncoding:NSASCIIStringEncoding]]; [outputStream write:[data bytes] maxLength:[data length]]; } /* - (void)stream:(NSStream *)theStream handleEvent:(NSStreamEvent)streamEvent { NSLog(@"stream event %i", streamEvent); } */ - (void)stream:(NSStream *)theStream handleEvent:(NSStreamEvent)streamEvent { typedef enum { NSStreamEventNone = 0, NSStreamEventOpenCompleted = 1 << 0, NSStreamEventHasBytesAvailable = 1 << 1, NSStreamEventHasSpaceAvailable = 1 << 2, NSStreamEventErrorOccurred = 1 << 3, NSStreamEventEndEncountered = 1 << 4 }; uint8_t buffer[1024]; int len; switch (streamEvent) { case NSStreamEventOpenCompleted: NSLog(@"Stream opened now"); break; case NSStreamEventHasBytesAvailable: NSLog(@"has bytes"); if (theStream == inputStream) { while ([inputStream hasBytesAvailable]) { len = [inputStream read:buffer maxLength:sizeof(buffer)]; if (len > 0) { NSString *output = [[NSString alloc] initWithBytes:buffer length:len encoding:NSASCIIStringEncoding]; if (nil != output) { NSLog(@"server said: %@", output); } } } } else { NSLog(@"it is NOT theStream == inputStream"); } break; case NSStreamEventHasSpaceAvailable: NSLog(@"Stream has space available now"); break; case NSStreamEventErrorOccurred: NSLog(@"Can not connect to the host!"); break; case NSStreamEventEndEncountered: [theStream close]; [theStream removeFromRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode]; break; default: NSLog(@"Unknown event %i", streamEvent); } } /* - (void) messageReceived:(NSString *)message { [messages addObject:message]; [self.tView reloadData]; } */ @end

su archivo ViewController.h contendría

#import <UIKit/UIKit.h> @interface ViewController : UIViewController <NSStreamDelegate> @property (weak, nonatomic) IBOutlet UITextField *inputNameField; @property (weak, nonatomic) IBOutlet UIView *joinView; - (IBAction)joinChat:(id)sender; @end NSInputStream *inputStream; NSOutputStream *outputStream; NSMutableArray * messages;

NOOBS SOLAMENTE: debe vincular su botón y campo de texto al presionar CONTROL y arrastrar el objeto a la ventana de código. cuando lo haga, las propiedades anteriores se crearán automáticamente. mira este video tutorial si estás perplejo

NOOBS SOLAMENTE 2: este zócalo se emitirá en el PANEL DE CONSOLA de XCODE. en la esquina superior derecha de su ventana de xcode, haga clic en OCULTAR O MOSTRAR EL ÁREA DE DEPURACIÓN (solicite ayuda si es necesario).

construido y probado (simulador y dispositivo) en un macbook con memoria de 2GB, usando xcode 4.2 para el leopardo de las nieves.