Pregunta

En Java, cuál sería la mejor manera de tener un puerto de escucha abierto constantemente y aún así enviar al recibir un paquete.No soy particularmente experto en programación de redes en este momento, por lo que los tutoriales que he encontrado en la red no son particularmente útiles.

¿Tendría sentido tener el socket de escucha como servidor y ejecutarlo en un hilo separado del socket que estoy usando para enviar datos al servidor?

En una pregunta vagamente relacionada.¿Alguien sabe si programando simplemente para Java, en Netbeans y luego exportándolo para usarlo en una Blackberry (usando un complemento), los sockets aún funcionarían?

¿Fue útil?

Solución

Si puede permitirse el lujo de utilizar subprocesos, intente esto (tenga en cuenta que he omitido algunos detalles como el manejo de excepciones y el manejo agradable de los subprocesos).Quizás quieras investigar SocketChannels y/o sockets/selectores asíncronos NIO.Esto debería ayudarte a empezar.

boolean finished = false;
int port = 10000;
ServerSocket server = new ServerSocket(port);

while (!finished) {
    // This will block until a connection is made
    Socket s = server.accept();
    // Spawn off some thread (or use a thread pool) to handle this socket
    // Server will continue to listen
}

Otros consejos

En cuanto a conectarse a un Blackberry, esto es problemático ya que en la mayoría de los casos el Blackberry no tendrá una dirección IP pública y en su lugar estará detrás de una puerta de enlace WAP o un servidor de punto de acceso de un proveedor inalámbrico.RIM proporciona el servidor de datos móviles (MDS) para solucionar este problema y proporcionar datos "Push" que utilizan la semántica ServerSocket en Blackberry.El MDS está disponible con Blackberry Enterprise Server (BES) y Unite Server.

Una vez configurados, los datos se pueden enviar a una unidad particular a través del MDS utilizando el protocolo HTTP.Hay una excelente descripción del protocolo Push. aquí con código fuente LAMP.El parámetro PORT=7874 en pushout.pl se conecta al zócalo del servidor Blackberry Browser Push.Al cambiar ese parámetro, la carga útil se puede enviar a un puerto arbitrario donde su propio ServerSocket acepta conexiones.

Si su código de socket tiene que ejecutarse en un BlackBerry, no puede utilizar sockets Java estándar.Debe utilizar la API J2ME Connector.open para crear ambos tipos de sockets (los que inician conexiones desde BlackBerry y los que escuchan conexiones/pushs en BlackBerry).Eche un vistazo a los ejemplos que vienen con JDE de RIM.

También necesitaría volver a lo básico para este.Recomiendo el excelente O'Reilly. Java en pocas palabras que incluye ejemplos de código para tal caso (disponible en línea también).Consulte el Capítulo 7 para obtener una descripción general bastante buena de las decisiones que le gustaría tomar desde el principio.

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