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

Contador de bytes en flujo de sockets

Estas en el tema de Contador de bytes en flujo de sockets en el foro de Java en Foros del Web. Hola, tengo programado un servidor de sockets y me interesa saber el trafico entrante y el saliente. Tengo este codigo para el entrante: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); ...
  #1 (permalink)  
Antiguo 13/01/2010, 10:13
Avatar de sfx4ever  
Fecha de Ingreso: noviembre-2003
Ubicación: aqui
Mensajes: 384
Antigüedad: 21 años
Puntos: 2
Contador de bytes en flujo de sockets

Hola, tengo programado un servidor de sockets y me interesa saber el trafico entrante y el saliente.

Tengo este codigo para el entrante:
Código Javascript:
Ver original
  1. char EOF = (char)0x00;
  2. BufferedReader in = new BufferedReader (new InputStreamReader(scliente.getInputStream()));
  3. String linea = in.readLine().trim();

y este para el saliente:
Código Javascript:
Ver original
  1. PrintWriter out=new PrintWriter(scliente.getOutputStream(),true);
  2. out.println("datos_a_enviar");
  3. //dar larga a los datos
  4. out.println(EOF);
  5. out.flush();


con este código, ¿como podria hacer un contador de los bytes entrantes y otro de los salientes?

saludos
  #2 (permalink)  
Antiguo 13/01/2010, 10:37
 
Fecha de Ingreso: enero-2008
Mensajes: 614
Antigüedad: 16 años, 10 meses
Puntos: 57
Respuesta: Contador de bytes en flujo de sockets

Pues hay varias posibilidades.

La primera es que utilices read(char[] cbuf, int off, int len) en lugar de readLine. En read puedes especificar el numero de bytes que quieres leer. La funcion regresa el numero de bytes que en realidad leyo. Asi puedes llevar la cuenta de los bytes que has leido.

La segunda opcion es que utilices la funcion available() de InputStream. Tendrias que asignar el InputStream del socket a un objeto y con el mantener la cuenta.
Código:
char EOF = (char)0x00;
int total = 0;

BufferedReader in = new BufferedReader (new InputStreamReader(scliente.getInputStream()));
InputStream ins = scliente.getInputStream();
total += ins.available();
String linea = in.readLine().trim();
  #3 (permalink)  
Antiguo 13/01/2010, 10:50
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 21 años, 1 mes
Puntos: 51
Respuesta: Contador de bytes en flujo de sockets

El método available no sirve para eso por que te devuelve el numero de bytes que puedes leer del stream sin bloquearte, lo cual no quiere decir mucho respecto al tráfico real. Por ejemplo leyendo de segun que streams es muy habitual que devuelva siempre 0, por que leas lo que leas podrías sufrir un bloqueo.

Dado que tienes lo que lees (un String) y lo que vas a escribir (otro String) y que puedes saber cual es la longitud en bytes de cada uno de estos elementos... ¿cual es el problema?

S!
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.
  #4 (permalink)  
Antiguo 13/01/2010, 11:15
Avatar de sfx4ever  
Fecha de Ingreso: noviembre-2003
Ubicación: aqui
Mensajes: 384
Antigüedad: 21 años
Puntos: 2
Respuesta: Contador de bytes en flujo de sockets

Cita:
Iniciado por GreenEyed Ver Mensaje
Dado que tienes lo que lees (un String) y lo que vas a escribir (otro String) y que puedes saber cual es la longitud en bytes de cada uno de estos elementos... ¿cual es el problema?
Gracias por vuestras respuestas, GreenEyed, efectivamente leo y envio Strings, pero ahí esta la cuestión, jeje, ¿cual la longitud en bytes por cada caracter del String?


He buscado por internet, pero no encuentro nada convincente, ¿lo sabe alguien con certeza?
  #5 (permalink)  
Antiguo 13/01/2010, 15:57
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 21 años, 1 mes
Puntos: 51
Respuesta: Contador de bytes en flujo de sockets

La verdad, está en el API:

http://java.sun.com/j2se/1.5.0/docs/...ngth%28%29
Cita:
Returns the length of this string. The length is equal to the number of 16-bit Unicode characters in the string.
O sea, 2 bytes por caracter en Java.
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.

Etiquetas: contador, flujo, sockets, byte
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 09:10.