Cita:
Iniciado por razer Segun esa especificacion que mostre ahi, lo que dudo es del pstrlen porque al obtener los bytes de eso me devuelve 2, y el protocolo dice claramente que debe ser 1 byte (string length of <pstr>, as a single raw byte).
El problema es que el Integer de Java es de 4 bytes.
Es seguro que te pide la longitud en binario. Por lo tanto, si tiene 20 letras ... no mandas '2'+'0'.
Para convertir un Integer en Byte usa java.lang.*
java.lang.Integer.byteValue()
Pero va a ver una perdida de exactitud si hay más de 127 letras (El byte más grande puede ser 127).
Si tuvieras una cantidad de bytes > 127 y mandas length = 127 al protocolo no le va a gustar.
Cita:
Iniciado por razer Porque vos dirias que me serviria una conversion de Unicode a ASCII ?
No, al contrario ... al hacer String.getBytes() ó new String(bytes[]), puedes tener problemas. La documentación dice que la conversión de ese tipo de hace a traves de un Encoder ... que puede cambiar los bytes[]. Específicamente indica que después de la conversión la cantidad de bytes[] puede ser diferente a la longitud del String. Me estoy inmaginando que el servidor te devuele un info_hash, si el servidor lo envio en ANSI y lo metes en un String Unicode, creo que puede tener errores facilmente.
Cita:
Iniciado por razer Del resto no dudo porque cumple con los bytes que dice (creo, jejej), por ejemplo info_hash y peer_id son 20 bytes (porque son 20 chars) y cumple con lo que dice, a lo mismo que reserved.
Lo que tiene que quedar son bytes long de 49+len(pstr)... el 49 ya lo tengo, tengo problemas con el length.. nose si con alguno mas, quizas es posible :S
Tendrías que ver los bytes reales.
Usa la clase java.io.ByteArrayOutputStream