Hola a todos.

Les platico el problema.

Tengo una aplicación de consola hecha en c# que funciona como cliente de un
Servidor remoto el cual no tengo idea de cómo esté programado, pero sé que
recibe peticiones en un puerto de un socket.

Mi aplicación al iniciar crea un objeto tcpClient que abre una conexión con
el servidor y envía como mensajes cadenas de texto plano. Hasta aqui no hay
problema. Mando mi mensaje y el servidor lo recibe. El envío de mensajes lo
hago a través de un streamwriter, mediante una función que se llama
EnviarMensaje :

 StreamWriter sw;
 sw =  new streamWriter(tcpClient.getStream());
 sw.WriteLine(mensaje)
 sw.flush();


Para la recepción de los mensajes que me manda el servidor, he creado un
streamReader que lee los datos del mismo stream del tcpClient. Algo como;

StreamReader sr;
sr =  new StreamReader(tclClient.getStream());
string respuesta =  sw.ReadLine();

El envío de mensajes funciona ok. El problema es que no recibo los mensajes
que me manda el servidor. La recepción de mensajes del servidor se hace en
un thread que dentro de un ciclo while (mientras esté conectado), debe
guardar en un string lo que obtenga de sr.ReadLine();

Esta aplicación funciona bien en mi entorno de desarrollo, junto con una
aplicación de prueba que hice para simular al servidor real al que tengo que
conectarme. El problema surgió ahora que ya tuve que conectarme al servidor
real. Recibe mis mensajes pero mi aplicación no recibe los del servidor.
Parece que nunca se cumple la condición while(conected)

¿cómo es posible que todo funcione sin problemas en mi entorno y no reciba
nada cuando intento comunicación con el servidor real?
Un detalle es que sí recibí las respuestas del servidor, pero solo hasta que
la aplicación del servidor se cerró,

¿No es correcto que use el mismo tcpclient para leer y escribir del Stream?

¿Tendría que tener en mi aplicación cliente un tcpListener para recibir los
mensajes? Pero si así fuera, no tendría que funcionar tampoco en mi entorno
de prueba  ¿o si? ¿y por que funcionaría solo cuando la aplicación remota se
cierra?

Gracias de antemano.

Responder a