27/08/2008, 14:52
|
| | Fecha de Ingreso: febrero-2006
Mensajes: 35
Antigüedad: 18 años, 11 meses Puntos: 0 | |
Respuesta: length en un solo byte Te dejo un ejemplo de como podrias hacer el paquete:
import com.outbackinc.util.log.SysInfo;
public class HandShake {
public static void main(String args[]){
/**Vector de byter que voy a utilizar como paquete que va a tener un
* tamaño total de 68 byte:
* pstrlen: string length of <pstr>, as a single raw byte
* pstr: string identifier of the protocol 19
* 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).
*/
byte[] b = new byte[68];
/**Variables en String*/
String pstr = "BitTorrent protocol";
String reserved = "00000000";
String info_hash = "D027FE403E861F4F65F6";
String peer_id = "-AZ2837465019234856-";
String resto = pstr+reserved+info_hash+peer_id;
/**el primer byte es el tamaño de pstr*/
b[0] = (byte) pstr.length();
/**Luego voy guardando cada char en un byte*/
for(int i=0;i<resto.length();i++){
b[i+1] = (byte)resto.charAt(i);
}
/**Muestro los datos para ver si son correctos*/
for(int i=0;i<68;i++){
/**Como el 1 byte tiene que interpretarse como int lo casteo como tal*/
if(i==0)
System.out.println("Resultado: "+(int)b[i]);
else
System.out.println("Resultado: "+(char)b[i]);
}
/**Por ultimo queda enviar con el metodo write(byte[]b) que tiene la clase Socket*/
}
} |