Foros del Web » Programación para mayores de 30 ;) » .NET »

Ayuda Sockets C#

Estas en el tema de Ayuda Sockets C# en el foro de .NET en Foros del Web. De nuevo a la carga con la **** aplicacion esta, a ver, tengo un servidor, que recibe conexiones de muchos clientes, lo hago usando las ...
  #1 (permalink)  
Antiguo 09/11/2010, 14:03
 
Fecha de Ingreso: marzo-2009
Mensajes: 52
Antigüedad: 12 años, 7 meses
Puntos: 0
Busqueda Ayuda Sockets C#

De nuevo a la carga con la **** aplicacion esta, a ver, tengo un servidor, que recibe conexiones de muchos clientes, lo hago usando las clases TcpListener para el servidor y TcpClient para los clientes con su respectivo NetworkStream para enviar y recibir datos.

Entonces, quiero que veais el codigo a ver si veis algo mal, por que si lo depuro, y voy linea por linea con el F11 dandole paso yo funciona perfecto, en el momento que lo dejo libre, falla, por lo cual no puedo saber donde es, un ejemplo, para enviar un string a la conexion hago esto en el que va a recibir:

Código C#:
Ver original
  1. public string recibirString()
  2.         {
  3.             if (stream == null)
  4.                 stream = conexion.GetStream();
  5.             int longitud = recibirLongitud();
  6.             //stream = conexion.GetStream();
  7.             Byte[] bytes = new Byte[longitud];
  8.             Int32 i;
  9.             String datos = String.Empty;
  10.             if ((i = stream.Read(bytes, 0, bytes.Length)) != 0)
  11.             {
  12.                 datos = System.Text.Encoding.UTF8.GetString(bytes, 0, i);
  13.                 return datos;
  14.             }
  15.             return datos;
  16.         }

y recibirLongitud es:

Código C#:
Ver original
  1. private int recibirLongitud()
  2.         {
  3.             if (stream == null)
  4.                 stream = conexion.GetStream();
  5.             Int32 longitud = 0;
  6.             Byte[] longitudByte = new Byte[4];
  7.             //stream = conexion.GetStream();
  8.             stream.Read(longitudByte, 0, longitudByte.Length);
  9.             longitud = BitConverter.ToInt32(longitudByte, 0);
  10.             return longitud;
  11.         }

Eso el que lo recibe, y el que envia hace esto cuando ese esta esperando a recibir:

Código C#:
Ver original
  1. public bool enviarString(string mensaje)
  2.         {
  3.             if (stream == null)
  4.                 stream = conexion.GetStream();
  5.             try
  6.             {
  7.                 Byte[] paquete = System.Text.Encoding.UTF8.GetBytes(mensaje);
  8.                 enviarLongitud(paquete);
  9.                 stream.Write(paquete, 0, paquete.Length);
  10.                 stream.Flush();
  11.                 return true;
  12.             }
  13.             catch { return false; }
  14.         }

donde enviarLongitud es:

Código C#:
Ver original
  1. private bool enviarLongitud(Byte[] paquete)
  2.         {
  3.             if (stream == null)
  4.                 stream = conexion.GetStream();
  5.             try
  6.             {
  7.                 int longitud = paquete.Length;
  8.                 byte[] longitudBytes = BitConverter.GetBytes(longitud);
  9.                 stream.Write(longitudBytes, 0, longitudBytes.Length);
  10.                 stream.Flush();
  11.                 return true;
  12.             }
  13.             catch { return false; }
  14.         }

Algun comentario?

EDITO: stream en este caso seria el NetworkStream y conexion es el TcpClient.
  #2 (permalink)  
Antiguo 09/11/2010, 18:14
 
Fecha de Ingreso: marzo-2009
Mensajes: 52
Antigüedad: 12 años, 7 meses
Puntos: 0
Respuesta: Ayuda Sockets C#

Solucionado, por si a alguien le sirve, en el metodo de recibirString, la cosa se quedaria asi:

Código C#:
Ver original
  1. public string recibirString()
  2.         {
  3.             if (stream == null)
  4.                 stream = conexion.GetStream();
  5.             int longitud = recibirLongitud();
  6.             Byte[] bytes = new Byte[longitud];
  7.             Int32 i;
  8.             String datos = String.Empty;
  9.             int bytesRecibidos = 0;
  10.             while (bytesRecibidos < longitud)
  11.             {
  12.                 i = stream.Read(bytes, bytesRecibidos, longitud-bytesRecibidos);
  13.                 bytesRecibidos += i;
  14.             }
  15.             datos = System.Text.Encoding.UTF8.GetString(bytes, 0, bytes.Length);
  16.             return datos;
  17.         }

Etiquetas: sockets
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:16.