Domanda

Ho un paio di domande per quanto riguarda il Peer Bittorrent Filo di Protocollo.Sto cercando di implementare in Java utilizzando questa spec.

Peer Protocollo di collegamento sezione in cui si dice che tutti i numeri interi sono quattro byte big endian valori.AFAIK java utilizza la big endian.Che significa dire che se voglio inviare un messaggio di soffocare

soffocamento:<len=0001><id=0>

Posso solo scrivere il sokcet 1 seguito da 0?

Per quanto riguarda la mia seconda domanda.quando si richiede per un pezzo che non credo più file in un unico grande continua il file?o pensare in singoli file?perché la lunghezza del pezzo non si allineano con i file in modo un indice può contenere sia la fine di un file e l'inizio di un'altra?

Come per la mia ultima domanda, quando ho aperto una connessione peer e inviare la mia stretta di mano, devo solo tenere la richiesta di pezzi o richiesta, quindi attendere un po ' per vedere se la richiesta di qualcosa da noi?come si fa a parlare di prendere posto?Ho in gran parte fatto http tipo di programmazione di rete in cui mi chiedono qualcosa di attendere una risposta.ma se tengo la richiesta di pezzi come faccio a mandare i pezzi?

È stato utile?

Soluzione

Domanda 1

Attaccare a metodi semplici, se si utilizza il flusso di base di I/O quindi utilizzare DataInputStream e DataOutputStream durante la scrittura di tipi primitivi (ad esempio, byte, int, lungo, etc.):

Socket s; // assume this is already connected
DataOutputStream out = new DataOutputStream( s.getOutputStream );
out.writeByte( 1 );
out.writeInt( 0 );
out.flush(); // optional

Se si sta utilizzando non-blocking I/O (ad es.le classi di java.nio pacchetto) e poi utilizzare ByteBuffer s:

Socket s; // assume this is already connected
SocketChannel = s.getChannel();
ByteBuffer buf = ByteBuffer.allocate(8); // two 4-byte integers
buf.put( 1 ).putInt( 0 );
buf.flip();
c.write( buf ); // assuming channel is writable :)

Ciascuno di questi metodi si prenderà cura di ordine dei byte di problemi sul vostro conto.

Domanda 2

(Si noti che, di solito, il trasferimento di blocchi, che sono frammenti di pezzi, sul filo.Io sorvolare che qui :) )

Durante l'invio/ricezione di pezzi, è meglio pensare a dei file (o file) come continua, come si è detto.L' .torrent file contiene informazioni su un file all'altro, in dizionario delle informazioni.Nel multi-file, in caso, ogni file ha percorso e lunghezza;il file singolo caso ha un nome opzionale e lunghezza.Dal momento che si sa il pezzo dimensioni, numero di pezzi e il contenuto totale lunghezza (tutti i .file torrent), si possono mettere i pezzi "nel posto giusto", come lei li riceve.

Una cosa semplice da fare è creare un unico file uguale alla dimensione del torrente.Quando si riceve un pezzo di scrittura per il corretto offset di byte all'interno di questo unico file (a volte chiamato ".il download di file").Per esempio, si consideri un torrente costituito da due file:

a/b/file1.txt [100 bytes]
a/b/file2.txt [200 bytes]

piece size (pz) = 50 bytes
total size (tz) = 100+200 = 300 bytes
number pieces (np) = 300/50 = 6
file = my_torrent.downloading

Si supponga che il numero di pezzi e offset di byte a partire da zero.Dire che si ricevono tutte 1 pezzo.A che cosa (start) offset di byte non andare in my_torrent.il download?Va da a (1*pz) = (1*50) = 50.Da dove viene il pezzo 0 vai?A (0*pz) = (0*50) = 0.E così via...

Scommetto che ora si riesce a capire come si attiva questo .il download del file in "reale" contenuto all'interno del vostro torrent.

Domanda 3

Quando si partecipa ad un BitTorrent sciame, si vengono a caricare e scaricare i pezzi da diverse coetanei contemporaneamente .Pensare che per un secondo.Allo stesso tempo si richiede un pezzo da alcuni peer, un altro peer potrebbe fare la stessa cosa da te.Molto diversa dalla semantica del HTTP, come già sottolineato.Così, per parlare direttamente alla tua domanda, altri coetanei ti chiederà i dati sono interessati.:)

Solo per assicurarsi che, prima della richiesta di un pezzo da un peer assicurarsi che il peer è il pezzo che si desidera (check out il campo di bit e di messaggi), e di aver rispettato il corretto soffocamento/interessati il comportamento.Dato che, da quello che normalmente si desidera fare è richiesta dati dal tuo elenco di coetanei (che il tracker o DHT detto circa) in più rari primo ordine.La spec parla di questo e ci sono UN SACCO di ottimizzazioni e cortesia considerazioni qui.(Tit-for-tat comportamento, per esempio). Si può notare che il spec non magia di un sacco di questo.Ecco perché un sacco di salsa segreta di client BitTorrent si trova in questa parte della loro attuazione.:)

Spero che questo aiuta un po'!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top