2012-10-09 31 views
9

Estoy tratando de escribir un programa de socket muy simple, lo que básicamente quiero es que el cliente siga escuchando la comunicación del servidor, en un ciclo while (verdadero). ahora también quiero que el cliente pueda enviar datos al servidor en medio de la escucha.Socket leer y escribir simultáneamente

La única solución en la que puedo pensar es hacer un hilo para leer y escribir, e interrumpir el hilo de lectura cada vez que tengo que escribir.

¿Hay una solución mejor o es esta la única manera que puedo hacer esto

+1

Por favor, edite su publicación para proporcionar más detalles sobre su trabajo. ¿Qué has intentado? ¿Qué investigación has hecho? ¿Qué código no está funcionando? – Gray

+1

Simplemente no es un problema - vea la respuesta de @CrazyCasta. Las transmisiones de Tx/rx son independientes y se leen desde un hilo mientras que escribir desde otro está bien. –

+0

R/W simultáneamente es la definición de Full-duplex, que es TCP. – irreputable

Respuesta

6

Se pueden utilizar dos hilos. Uno para leer y otro para escribir. De esta forma, el hilo de escritura puede escribir siempre que lo desee (no es necesario detener la lectura).

Otra forma de hacerlo es usar setSoTimeout(timeoutMs) en el zócalo antes de llamar a leer. Esto causará que arroje un SocketTimeoutException si tarda más de milisegundos en tiempo de espera en leerse, lo que le permite escribir lo que desee.

+1

Estoy de acuerdo con esto, aparte de la parte de tiempo de espera. ¿Porqué querrías eso? Puedes escribir de todos modos. –

+0

@TobiasRitzau Le permite usar un hilo en lugar de dos. No estoy exactamente seguro de lo que el OP intenta hacer, así que solo estaba agregando otra opción. – CrazyCasta

+2

Hay algunos problemas graves de sincronización que pueden surgir de eso. Y si agota el tiempo de espera, el socket está cerrado o me falta algo? –

-1

Puede usar dos puertos diferentes, uno para escuchar y otro para escribir. y use diferentes hilos para hacer las operaciones, entonces usted mientras el bucle (verdadero) no creará un problema.

+2

Eso es lo que hace un socket ... Ya admite full duplex. –

0

Eche un vistazo a las especificaciones del protocolo FTP. Hace lo que pretende hacer usando dos zócalos/canales, uno para comandos y otro para datos.

+1

Eso no es necesario. Un socket es suficiente para enviar y recibir en dos canales separados. –

Cuestiones relacionadas