elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  Ayuda error al enviar imagen por socket C#
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda error al enviar imagen por socket C#  (Leído 4,473 veces)
boy-ka

Desconectado Desconectado

Mensajes: 74


Ver Perfil
Ayuda error al enviar imagen por socket C#
« en: 20 Junio 2015, 11:07 am »

Hola amigos, tengo un servidor y una conexión entre el cliente y el servidor, en el cuál el cliente puede enviar capturas de pantalla al servidor.

El problema es que aveces las imágenes llegan completa, otras veces llegan a mitad, y desde que llega a mitad, cuando vuelvo a tratar de enviar otra imágen aveces los bytes ni llegan bien.

Aquí les dejo el código del cliente y el servidor, a ver si me ayudan por favor he estado muchas horas rompiendome la cabeza a ver que pasa, he llegado a pensar que no capturo los bytes suficiente, pero como ven convierto la cadena a string y luego la convierto a byte con la longitud de bytes que debe tener la imagen, tampoco explicaría el por qué aveces las imagenes llegan bien, bueno aqui el código del cliente:

Código
  1.                //Capturo la imagen de la pantalla
  2.                Bitmap bmCaptura = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height);
  3.                Graphics captura = Graphics.FromImage(bmCaptura);
  4.                captura.CopyFromScreen(Screen.PrimaryScreen.Bounds.X, Screen.PrimaryScreen.Bounds.Y, 0, 0, Screen.PrimaryScreen.Bounds.Size);
  5.  
  6.                MemoryStream stream = new MemoryStream();
  7.                bmCaptura.Save(stream, ImageFormat.Jpeg);
  8.  
  9.                byte[] byteArray = stream.ToArray();
  10.  
  11.                //Envio los bytes al servidor.
  12.                NetworkStream net = conectarme.send_server;
  13.                net.Write(byteArray, 0, byteArray.Length);
  14.                net.Flush();
  15.  

SERVIDOR:

Código
  1. //Recibo la imagen del cliente y la guardo en un archivo.
  2.                TcpListener server = new TcpListener(IPAddress.Any, puerto);                
  3.                TcpClient client = server.AcceptTcpClient();
  4.                NetworkStream stream = client.GetStream();
  5.                byte[] clientData = new byte[90000000];
  6.                int i = stream.Read(clientData, 0, clientData.Length);
  7.  
  8.                string res = Encoding.Default.GetString(clientData, 0, i);
  9.                byte[] img = Encoding.Default.GetBytes(res);
  10.                File.WriteAllBytes("dataFile.jpg", img);
  11.  

Como he dicho antes, aveces la imagen llega excelente, pero otras veces no, quisiera que me ayuden aunque no tengan la solución pero me den una pista por lo menos, esto me tiene con mucho estrés.

Saludos y gracias de ante mano.

PD: El cliente se logra conectar al servidor, pero me ahorré el código porque estaba en otra clase y me daba palo copiar, pero nah que ver, la conexión se realiza bien, el problema está en el envio de la imagen.

EDITADO POR FALTAS ORTOGRÁFICAS N_N


« Última modificación: 20 Junio 2015, 11:11 am por boy-ka » En línea

El Benjo


Desconectado Desconectado

Mensajes: 392



Ver Perfil WWW
Re: Ayuda error al enviar imagen por socket C#
« Respuesta #1 en: 21 Junio 2015, 00:22 am »

Yo hice un código hace tiempo precisamente para eso y me funcionaba bien, sólo que yo enviaba la información de forma distinta:

Primero envía un paquete de longitud de 4 bytes (int32) con la longitud en bytes de la imagen que deseas enviar. Después envía los bytes de la imagen.

Del lado del servidor captura primero los 4 bytes del tamaño y después debes comenzar la lectura de los datos y almacenarlos hasta llegar a la longitud deseada. Una vez que has alcanzado la longitud realizas la conversión del flujo de bytes a imagen.

Te dejo el código de envío y lo pruebas. Di si te funciona. El de recepción te lo dejo de tarea. ;)

Código
  1. //Capturo la imagen de la pantalla
  2.                Bitmap bmCaptura = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height);
  3.                Graphics captura = Graphics.FromImage(bmCaptura);
  4.                captura.CopyFromScreen(Screen.PrimaryScreen.Bounds.X, Screen.PrimaryScreen.Bounds.Y, 0, 0, Screen.PrimaryScreen.Bounds.Size);
  5.  
  6.                MemoryStream stream = new MemoryStream();
  7.                bmCaptura.Save(stream, ImageFormat.Jpeg);
  8.  
  9.                byte[] byteArray = BitConverter.GetBytes(stream.Lenght);
  10.  
  11.                //Envio los bytes al servidor.
  12.                NetworkStream net = conectarme.send_server;
  13. // Primero envío la longitud.
  14.                net.Write(byteArray, 0, 4);
  15.                byteArray = stream.ToArray();
  16. // Después envío los datos.
  17.                net.Write(byteArray, 0, byteArray.Length);
  18.                net.Flush();


En línea

www.es.neftis-ai.com

Sí hay un mejor lenguaje de programación y es ese con el que puedes desarrollar tus objetivos.
boy-ka

Desconectado Desconectado

Mensajes: 74


Ver Perfil
Re: Ayuda error al enviar imagen por socket C#
« Respuesta #2 en: 24 Junio 2015, 09:37 am »

Gracias amigo, si me ha funcionado mil gracias!, si quieres te paso el código que le puse al servidor (ya que me lo dejaste como tarea xD)
En línea

El Benjo


Desconectado Desconectado

Mensajes: 392



Ver Perfil WWW
Re: Ayuda error al enviar imagen por socket C#
« Respuesta #3 en: 25 Junio 2015, 06:54 am »

Jajajajajajajajajajajaja Que bueno que te sirvió.

No te lo voy a calificar, pero en todo caso puedes dejarlo para que le sirva a alguien más... o (habiendo dicho cómo tratar el problema) podemos dejárselo de tarea también a esa persona. XD
En línea

www.es.neftis-ai.com

Sí hay un mejor lenguaje de programación y es ese con el que puedes desarrollar tus objetivos.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Cómo enviar archivos vía socket en java
Java
Nekro_Psycho 0 15,559 Último mensaje 10 Enero 2006, 21:29 pm
por Nekro_Psycho
enviar un BufferedImage a travez de socket
Java
egyware 6 21,626 Último mensaje 3 Diciembre 2010, 02:04 am
por passatempo
Enviar datos a determinado Socket
Programación Visual Basic
HJZR4 6 2,737 Último mensaje 4 Octubre 2007, 16:55 pm
por HJZR4
enviar paquetes por socket que ya existe
Programación C/C++
while 2 3,555 Último mensaje 30 Septiembre 2010, 23:07 pm
por while
Ayuda con mi codigo. (Enviar buffer de imagen de c++ a java)(SOCKETS)
Java
70N1 0 1,664 Último mensaje 18 Diciembre 2015, 16:59 pm
por 70N1
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines