velocidad utorrent semillas rapido para mas descargas descargar descarga configurar compis como aumentar acelerar acelerador c get bittorrent

utorrent - cómo enviar la solicitud get al servidor de seguimiento de torrents



configurar utorrent para descargar mas rapido 2018 (3)

¿Comprobaste que gethostbyname devolvió una dirección válida? Creo que no debería agregar la parte de cadena de protocolo http: // o udp: // como argumento gethostbyname.

struct hostent *hp = gethostbyname("tracker.thepiratebay.org"); if(!hp) { herror("gethostbyname(): "); exit(1); }

Agregue esta línea para asegurarse de que gethostbyname funcionó correctamente.

Estoy tratando de implementar un cliente bit torrent. Obtengo mi información desde aquí: http://wiki.theory.org/BitTorrent_Tracker_Protocol .

Deseo enviar una solicitud de obtención al rastreador para obtener la lista de pares. ¿Debo configurar una conexión udp y conectarme a udp: //tracker.thepiratebay.org en el puerto 80? ¿Es este el mensaje de mi solicitud?

"udp://tracker.thepiratebay.org??info_hash=12345678901234567890 &peer_id=ABCDEFGHIJKLMNOPQRST port=6888 &downloaded=0 &left=0 &event=started "

esta es mi parte de mi código:

char *requestToSend; int sock; struct sockaddr_in servAddr; struct sockaddr_in fromAddr; int fromSize; int respStringLen; int portNum =80; char data_recv[ECHOMAX]; char *hash="12345678901234567890"; char *id="ABCDEFGHIJKLMNOPQRST"; char *temp ="udp://tracker.thepiratebay.org??info_hash=12345678901234567890/n&peer_id=ABCDEFGHIJKLMNOPQRST/nport=6888/n&downloaded=0/n&left=0/n&event=started"; requestToSend = malloc(sizeof(temp)+1); sprintf(requestToSend, "%s??info_hash=%s/n&peer_id=%s/nport=%s/n&downloaded=0/n&left=0/n&event=started/0","udp://tracker.thepiratebay.org", hash,id,"6888"); printf("%s to send /n", requestToSend); /* Create a datagram/UDP socket */ if ((sock = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP)) < 0){ printf("fail create socket"); return 0; } /* Construct the server address structure */ struct hostent *hp = gethostbyname("udp://tracker.thepiratebay.org"); memset(&servAddr, 0, sizeof(servAddr)); /* Zero out structure */ servAddr.sin_family = AF_INET; /* Internet addr family */ memcpy( (char *) &servAddr.sin_addr.s_addr, hp->h_addr, hp->h_length ); servAddr.sin_port = htons(portNum); /* Server port */ //send request to tracker server if (send(sock, requestToSend, strlen(requestToSend), 0) != strlen(requestToSend)){ printf("fail send"); return 0; } /* Recv a response */ fromSize = sizeof(fromAddr); if ((respStringLen = recvfrom(sock, data_recv, ECHOMAX, 0, (struct sockaddr *) &fromAddr, &fromSize)) != strlen(requestToSend)){ printf("fail to recv"); return 0; }

esto es lo que obtengo de un archivo torrent

dict { announce => str = http://tracker.thepiratebay.org/announce (len = 40) announce-list => list [ list [ str = http://tracker.thepiratebay.org/announce (len = 40) ] list [ str = udp://tracker.thepiratebay.org:80/announce (len = 42) ] list [ str = http://tracker.openbittorrent.com/announce (len = 42) ] list [ str = udp://tracker.openbittorrent.com:80/announce (len = 44) ] ] creation date => int = 1174816388 encoding => str = UTF-8 (len = 5) info => dict { filehash => str = ¸¥£öüËXþÐS®(äfn6 (len = 20) length => int = 2222949 name => str = Audacity.zip (len = 12) name.utf-8 => str = Audacity.zip (len = 12) piece length => int = 32768 pieces => str = (null) (len = 0) } } d8:announce40:http://tracker.thepiratebay.org/announce13:announce-listll40:http: //tracker.thepiratebay.org/announceel42:udp://tracker.thepiratebay.org:80/announ ceel42:http://tracker.openbittorrent.com/announceel44:udp://tracker.openbittorre nt.com:80/announceee13:creation datei1174816388e8:encoding5:UTF-84:infod8:fileha sh20: ¸¥£öüËXþÐS®(äfn66:lengthi2222949e4:name12:Audacity.zip10:name.utf-812:Audacity.z yf3-ûBÎNrl lengthi32768e6:pieces1360:þ]úÙÉÅ''NÕæ+gd3fi6è6¶


El ejemplo dado en ese sitio web NO es para la comunicación UDP. Es para la comunicación a través de TCP, más específicamente, HTTP.


Si el rastreador usa UDP , no debe enviar una solicitud GET , sino establecer una conexión en el puerto designado y luego hacer 4 pasos:

  1. Enviar una solicitud de conexión
  2. Confirme la solicitud de conexión leyendo la respuesta de 16 bytes y agárrese a la identificación de conexión
  3. Enviar un anuncio con la identificación de conexión
  4. Analizar la respuesta de anunciar, su tamaño depende de cuántos pares designen

La conexión UDP sobre todo toma menos paquetes para intercambiar la misma cantidad de información, pero está más involucrado en términos de implementación para un cliente :)

Este wiki entra en detalles sobre lo que se supone que los mensajes UDP deben incluir. Se asemejan a los mensajes que envía a sus pares (es decir, usan aplicaciones de big endian codificadas en una longitud fija de bytes)

o las especificaciones pueden ayudar