utilizan studio streams son socket que los desarrollo comunicación comunicacion aplicaciones android sockets udp ip datagram

android - studio - Mantenimiento de una conexión UDP bidireccional



socket android (1)

  1. Sí, eso no es problema y es la forma más conveniente de lidiar con la comunicación bidireccional. Además, si el cliente se coloca detrás de una NAT, se requiere que la perforación funcione correctamente. Aunque se enlace a la misma IP y puerto en el cliente, no se garantiza que obtenga la misma asignación en el NAT. Por lo tanto, es posible que el servidor no pueda llegar al cliente. Recuerde que estas asignaciones superan el tiempo de espera y se inician desde el interior de la red NAT, por lo que es posible que se necesiten algunas pruebas si el cliente permanece inactivo durante mucho tiempo.

  2. Eso depende de cómo diseñe la aplicación, pero no hay problema para hacerlo. Simplemente monitoree el estado de lectura y escritura del socket usando, por ejemplo, seleccionar. Si crea un socket que no sea de bloqueo combinado con una cola de lectura / escritura, asegúrese de nunca bloquear la operación. Como UDP escribe todo o nada, la cola es bastante directa.

  3. Según mi experiencia, eso es específico del proveedor en Android. Algunos teléfonos mantienen los enchufes abiertos durante mucho tiempo, mientras que otros los cierran después de un cierto período de inactividad. Parece que todos los teléfonos cierran los enchufes cuando el dispositivo se pone a dormir (el estado cuando se presiona el botón de encendido), excepto los asociados con una tarea en segundo plano.

Estoy escribiendo un cliente UDP de Android que se conecta y se comunica de forma bidireccional (sin relación entre los mensajes enviados y recibidos) con un servidor de Windows. Una vez que se ha enviado el Datagram inicial al servidor, quiero poder enviar datos en cualquier dirección en cualquier momento. Mis preguntas son:

1) ¿Es correcto mantener el socket inicial abierto y usarlo tanto para enviar como para recibir?

2) ¿Debo enviar y recibir en el mismo hilo (con un tiempo de espera en recepción) o en hilos separados (permitiendo que el receptor bloquee)?

3) ¿Se cerrará automáticamente el socket si los datos no se envían / ​​reciben dentro de un intervalo determinado?