Descripción general de la API de Sockets para Java 8

Esta es una versión Beta de la API de Sockets. Esta API no tiene un ANS ni una política de baja de servicio, y es posible que esté sujeta a cambios que generen incompatibilidad con versiones anteriores.

Importante: Las aplicaciones en el entorno de ejecución de Java 8 pueden usar sockets nativos de Java sin restricciones, incluido el uso de clases NIO y sus métodos. Las aplicaciones en el entorno de ejecución de Java 7 están sujetas a limitaciones de sockets que se describen en esta página.


Los sockets solo están disponibles para aplicaciones pagadas, y el tráfico de los sockets se factura como ancho de banda saliente. Los sockets también están limitados por cuotas por minuto (pico de actividad) y diarias.

El entorno de ejecución de Java 7 admite un socket de salida de Java limitado con una versión modificada de java.net.Socket y java.net.DatagramSocket.

El entorno de ejecución de Java 7 no admite las clases java.nio.SocketChannel java.nio ni la capacidad de llamar a las opciones get o set en sockets. Usar estas funciones generará excepciones Not Implemented. Estas restricciones se generan de forma predeterminada en el entorno de ejecución de Java 8.

A continuación, se muestran las opciones admitidas para las aplicaciones en el entorno de ejecución de Java 7.

  • SO_KEEPALIVE
  • SO_DEBUG
  • TCP_NODELAY
  • SO_LINGER
  • SO_OOBINLINE
  • SO_SNDBUF
  • SO_RCVBUF
  • SO_REUSEADDR

Limitaciones y restricciones (solo en el entorno de ejecución de Java 7)

La compatibilidad del socket en App Engine para las aplicaciones en el entorno de ejecución de Java 7 tiene las siguientes limitaciones:

  • Los sockets solo están disponibles para las aplicaciones pagadas.
  • No puedes crear un socket de escucha; solo puedes crear sockets de ida.
  • No se admite FTP.
  • java.net.URL sigue configurado para usar la API de URL Fetch en el entorno de ejecución de Java 7. Para superar esta limitación, puedes ejecutar tu app en el entorno de ejecución de Java 8, en el que java.net.URL y java.net.HttpURLConnection utilizan los sockets nativos de Java según la configuración predeterminada.
  • InetAddress.isReachable no funcionará.
  • Se admite la mayoría de las clases en javax.net.ssl.
  • Solo puedes usar TCP o UDP; no se permiten protocolos arbitrarios.
  • No puedes establecer una vinculación con puertos o direcciones IP específicos.
  • El puerto 25 (SMTP) está bloqueado; pero aún puedes usar el SMTP autenticado en el puerto de envío 587.
  • Los rangos de IP privado, de emisión, de multidifusión y de Google (excepto los que figuran en la lista blanca que se menciona a continuación) están bloqueados:

    • DNS público de Google: 8.8.8.8, 8.8.4.4, 2001:4860:4860::8888, 2001:4860:4860::8844, puerto 53
    • SMTPS de Gmail: smtp.gmail.com, puertos 465 y 587
    • POP3S de Gmail: pop.gmail.com, puerto 995
    • IMAPS de Gmail: imap.gmail.com, puerto 993
  • Los descriptores de socket están asociados con la aplicación de App Engine que los creó y no se pueden transferir (no pueden usarse en otras apps).

  • Los sockets pueden recuperarse después de 2 minutos de inactividad; cualquier operación de socket mantiene el socket en funcionamiento durante otros 2 minutos.

  • No puedes usar Select para elegir entre varios sockets disponibles porque esto requiere java.nio.SocketChannel, que actualmente no es compatible.

    Cómo usar sockets con el servidor de desarrollo

    Puedes ejecutar y probar el código con sockets en el servidor de desarrollo, sin usar ningún parámetro de línea de comandos especial.

    Muestra de App Engine con sockets (solo en el entorno de ejecución de Java 7)

    Para obtener una muestra con sockets, consulta la app de demostración de socket en GitHub de Google Cloud Platform.