我正在尝试为UDP跟踪器实现scrape方法,但我不断将0个seeder / leechers作为响应。我仍然得到一个2作为动作所以没有报告错误。 我在这里硬编码哈希只是为了表明它对我得到的结果没有影响。
final ByteArrayOutputStream byteStream =new ByteArrayOutputStream();
final DataOutputStream dataStream =new DataOutputStream(byteStream);
dataStream.writeInt(connectResponse.get("connectionId0"));
dataStream.writeInt(connectResponse.get("connectionId1"));
dataStream.writeInt(2);
dataStream.write(connectResponse.get("transactionId"));
bencodeWriter.write(byteOut.toString());
dataStream.writeChars("1D19CC96C1A4965D184E4B215942DBC0A09FF8F2");
dataStream.close();
final byte[] scrapeBytes= byteStream.toByteArray();
我尝试了不同的跟踪器,但得到了相同的响应。可能是什么问题?
编辑:添加了所有请求和响应的十六进制转储:
答案 0 :(得分:2)
在Scrape请求中;
transaction_id
= 0x36
作为单个字节而不是4个字节= 0x00000036
发送
并且info_hash
作为一个80字节的字符串发送,该字符串是十六进制编码的,每个字符前面都有一个零字节0x00
,而不是原始的20字节字符串。
I.E. 0x0031004400310039...
代替0x1D19...
Scrape响应没有对等体,因为在请求中没有发送info_hashes的种子。