Si, los datos vendrian a ser binarios. El tema es que no me puedo exceder de los bytes permitidos. Precisamente estoy haciendo un handshake a un peer (protocolo de bittorrent, no importa si no se entiende, este es un problema de Java no del protocolo).
y el protocolo me dice exactamente:
Código:
Handshake
The handshake is a required message and must be the first message transmitted by the client. It is (49+len(pstr)) bytes long.
handshake: <pstrlen><pstr><reserved><info_hash><peer_id>
* pstrlen: string length of <pstr>, as a single raw byte
* pstr: string identifier of the protocol
* reserved: eight (8) reserved bytes. All current implementations use all zeroes. Each bit in these bytes can be used to change the behavior of the protocol. An email from Bram suggests that trailing bits should be used first, so that leading bits may be used to change the meaning of trailing bits.
* info_hash: 20-byte SHA1 hash of the info key in the metainfo file. This is the same info_hash that is transmitted in tracker requests.
* peer_id: 20-byte string used as a unique ID for the client. This is usually the same peer_id that is transmitted in tracker requests (but not always e.g. an anonymity option in Azureus).
In version 1.0 of the BitTorrent protocol, pstrlen = 19, and pstr = "BitTorrent protocol".
Yo, actualmente en el codigo de Java tengo esto:
String pstr = "BitTorrent protocol";
String pstrlen = "19";
String reserved = "00000000";
String info_hash = "D027FE403E861F4F65F6";
String peer_id = "-AZ2837465019234856-";
String datasendpeer = pstr + pstrlen + reserved + info_hash + peer_id;
salida1.write(datasendpeer.getBytes());
Toda la informacion es correcta. Y fijate que le envio los bytes de todo eso (la idea es hacer todo con binario), pero no recibo respuesta (retorna -1), es claro que es porque le estoy mandando algo mal.
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).
Porque vos dirias que me serviria una conversion de Unicode a ASCII ? me podrias mostrar un ejemplo en 2 lineas de lo que hablas? ando perdido :(
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