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

 

 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  OutputStream, write() no envia los datos
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: OutputStream, write() no envia los datos  (Leído 1,595 veces)
xmbeat

Desconectado Desconectado

Mensajes: 7


Ver Perfil
OutputStream, write() no envia los datos
« en: 28 Junio 2012, 04:36 am »

He estado haciendo un pequeño protocolo de comunicación para una aplicación que tengo planeada, básicamente el protocolo consiste en que el cliente hace una petición conformada por atributos(Nombre y Valor) separados por un "\n", cuando la petición es terminada, se le agrega otro "\n", y el servidor responde de manera análoga, ejemplo:
El cliente haría esta petición:
GET /home/xmbeat/archivo.txt
BYTE-POS 10
__________________________
El servidor respondería así:
XmServer/1.0 GOOD
CONTENT-LENGTH 400
FILE-LENGTH 410
__________________________
[DATOS BINARIOS DE LONGITUD 400]
Como aprecian es parecido al protocolo http, pero no logro hacerlo funcionar, el programa funciona de esta manera: el servidor se pone a la escucha y por cada cliente que se conecte, crea un hilo que atienda sus peticiones hasta que el cliente decida desconectarse (esto es así para cada hilo), todo marcha bien pero en mi caso, siempre llegan los meta-datos, pero no siempre los datos binarios. En ocasiones hace lo que le digo, pero otras veces se queda esperando el paquete que nunca llega, aun cuando hago flush(), close(), pero nada!

Así que, supuse que el método write() debería estar fallando,  por ejemplo, usando C, el método write() me indicaba cuantos datos se pudieron enviar, pero desafortunadamente en Java este método es void, así que no se si se enviaron o no. Esta es la parte del código que creo que falla:
Código
  1. public void sendData(OutputStream salida) throws IOException
  2. {
  3. if (isReady())
  4. {
  5. byte buffer[] = new byte[SIZE_BUFFER];
  6. int sizeChunk = 0;
  7. if (_source instanceof File)
  8. {
  9. File file = (File)_source;
  10. FileInputStream entrada = new FileInputStream(file);
  11. while((sizeChunk = entrada.read(buffer))>0)
  12. {
  13. salida.write(buffer, 0, sizeChunk); //he intentado con flush(), pero no!
  14. }
  15. }
  16. else if (_source instanceof byte[])
  17. {
  18. byte src[] = (byte[])_source;
  19. int max  = src.length / SIZE_BUFFER;
  20. int rest = src.length % SIZE_BUFFER;
  21. int i = 0;
  22. while (i < max)
  23. {
  24. salida.write(src, i*SIZE_BUFFER, SIZE_BUFFER);
  25. i++;
  26. }
  27. if (rest > 0)
  28. {
  29. salida.write(src, i*SIZE_BUFFER, rest);
  30. }
  31. }
  32. salida.flush();//Aseguramos que se envien, segun...
  33. }
  34. }
  35.  
  36.  

Adjunto el proyectohttps://dl.dropbox.com/u/81497136/src.zip
para compilarlo, ubicarse en la carpeta "src/" y desde el prompt ejecutar:
javac -d ../bin/ com/xmserver/componentes/*.java
javac -d ../bin/ com/xmserver/gui/*.java
Para ejecutar el server:
java -cp ../bin/ com.xmserver.gui.Main
Para ejecutar el cliente en otra shell usar:
java -cp ../bin/ com.xmserver.componentes.XmClientSession
ó
java -cp ../bin/ com.xmserver.componentes.XmClientSession; md5sum Song.mp3 Song2.mp3

Comentarios:
-Desbloquear el puerto 10500, o cambiarlo a gusto
-A mi en lo personal, el cliente funciona solo 2 veces, al 3er intento, se queda esperando un paquete que nunca es enviado, no sé porque, a pesar de que es un hilo aparte.
Ojalá hayan leído mi problema y puedan ayudarme, gracias!


« Última modificación: 28 Junio 2012, 04:39 am por xmbeat » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
XSS no envia datos
Nivel Web
achernar_ 5 3,121 Último mensaje 1 Marzo 2009, 23:39 pm
por WHK
Engañar script que recolecta datos y los envia a SQL
Programación General
Di~OsK 0 1,776 Último mensaje 22 Agosto 2010, 00:25 am
por Di~OsK
[SOLUCIONADO]a qué velocidad viajan los datos que envia una pc?
Redes
SuperNovato 5 7,911 Último mensaje 6 Enero 2011, 21:54 pm
por SuperNovato
En 24 horas un smartphone envia 350.000 paquetes de datos y contacta con ....
Noticias
wolfbcn 1 2,076 Último mensaje 24 Noviembre 2013, 21:20 pm
por Eleкtro
[Duda] Saber si mi ordenador envia datos a IPs (robo de datos).
Seguridad
AlbertoPerez 1 1,781 Último mensaje 4 Agosto 2017, 03:09 am
por Randomize
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines