Escribí un código en mi aplicación para habilitar Dispositivo a Dispositivo de Comunicación wifi (transfiriendo solo un texto/cadena). El código es el mismo que el de la muestra de Apple Witap Aplicación que se descarga del Desarrollador. Apple.com.Problema de comunicación Dispositivo a Dispositivo Wifi
Está trabajando bien en mi red y también en otras redes.
Sin embargo, no funciona en el sitio de mi cliente.
Me pasé un tiempo en el sitio del cliente para solucionar el problema con los dispositivos no comunicar entre sí y esto es lo que encontré. Ellos en su bloque de configuración de seguridad Comunicación punto a punto ..." y mi comunicación del dispositivo se identifica como de igual a igual.
¿Hay alguna manera de resolver este problema ¿Hay aparte de PEER 2 interlocutor de comunicación wifi todo lo que los soportes de manzana ?
aplicaciones prototipo WIFI Conceptos Trabajar
Existen principalmente cuatro clases en la aplicación WiFi nombrado como AppController, Picker, BrowserViewController, el servidor TCP.
Cuando se carga la aplicación, la clase AppController inicializará NSInputStraem y NSOutPut Stream.
Y también se llamará “start” método de la clase tcpserver para establecer el número de puerto.
Después de que se va a llamar al método “enableBounjourWithDomain” de la clase tcpserver.
La llamada al método anterior con un parámetro llamado identificador (es un nombre común, por ejemplo: WiTap) y la parte del remitente está buscando dispositivos con este identificador común.
Después de la ejecución de este método, el dispositivo emisor puede identificar nuestro dispositivo y poder conectarse.
Conseguir propio nombre de dispositivo
Tcp serverServer delegado “DidEnabledBounjer” va a funcionar después de la ejecución de código arriba y se le dará el nombre de dispositivo actual.
Entonces NSNetservice delegado “didFindService” va a funcionar (que funciona cuando cada servicio descubrió) y recuperar el nombre del servicio descubierto.
Después de obtener el nuevo nombre del servicio, comprobaremos si es igual al nombre de nuestro dispositivo que recibimos del delegado "DidEnabledBounjer".
si no, el nuevo nombre de servicio agregará en una matriz NSMutable nombrado como servicios.
Entonces gama de servicios se unen a l a vista de tabla y podemos ver la lista de los nombres de los dispositivos descubiertos.
descubrir los nuevos dispositivos:
No hay ajustes del temporizador para descubrir los nuevos dispositivos.
Cuando se conecta un nuevo dispositivo en la misma red WiFi, se activará el delegado "DidFindservice" (es un delegado NSNetservice implementado en la clase BrowserViewController).
DidFindservice dará el nuevo nombre de dispositivo. Después de obtenerlo, comprobaremos si es igual al nombre de nuestro dispositivo que recibimos del delegado "DidEnabledBounjer".
si no, el nombre del servicio se agregará a una matriz NSMutable denominada como servicios.
Luego, clasifique todos los nombres de dispositivos descubiertos de acuerdo con el Nombre del dispositivo y vuelva a cargar la Vista de tabla.
de trabajo después de seleccionar un nombre de dispositivo de la Tabla Ver
Tras hacer clic en el nombre del dispositivo en la TableView se llamará delegado “didSelectRowAtIndexPath” que se implementa en la clase BrowserViewController (que es un delegado TableView Clase).
Seleccionará un nombre NetService de nuestra matriz de servicios (contiene todos los servicios descubiertos) de acuerdo con el índice TableView y establecerá el servicio NS resultante como servicio actual.
Dispare un delegado "didResolveInstance" y establecerá los valores de InPutStream y OutPutStream.
Después de obtener los valores de InPutStream y OutPutStream llamará al método "OpenStream" para abrir los flujos de entrada y salida.
Finalmente, suelta los objetos NSService y Picker y está listo para enviar mensajes con los dispositivos seleccionados.
de Trabajo del botón Enviar
llamada “enviar“la función de la clase BrowserViewController con un parámetro de cadena .Es posible que la entrada de texto de usuario o cadena generada tras el reconocimiento de voz.
Convierta la cadena de entrada como un tipo de datos uint_8 y envíela al dispositivo receptor.
Receptor lado de trabajo
Cuando un vino de datos al receptor dispositivo de la delegada “TcpServerAcceptCallBack” se disparará (implementado en tcpserver Clase).
Llamará al método "DidAcceptConnectionForServer" de BrowserViewControll calss a través de otro delegado de la clase TcpServer llamado "HandleNewConnectionFromAddress".
Dispare el "delegado de la secuencia de control" que está en la clase "AppController" y comprobará si hay algún bocado disponible o no.
Si hay bytes disponibles, convierta los datos de tipo uint_8 a cadena y estamos visualizando la cadena resultante en el cuadro de texto del receptor.
Y también cargando imágenes y mostrándolas en la Vista de Imagen desde AppBundle usando la cadena resultante. </p>
mismo problema después de realizado el cambio – humblePilgrim
¿Funcionó la solución, es decir, puede ver el servidor tcp escuchando en el puerto 81 con "netstat -a"? –
lo siento, creo que no bloqueé mi puerto de red con éxito/bloqueo de comunicación entre pares en mi oficina para generar la situación aquí. – humblePilgrim