Java 没有从udp跟踪器中获取用于刮取的播种机和犁

Java 没有从udp跟踪器中获取用于刮取的播种机和犁,java,udp,bittorrent,Java,Udp,Bittorrent,我正在尝试为UDP跟踪器实现scrape方法,但我一直得到0个种子/种子作为响应。我仍然得到一个2作为行动,所以没有错误报告。 我在这里硬编码了一个散列,只是为了表明它对我得到的结果没有影响 final ByteArrayOutputStream byteStream =new ByteArrayOutputStream(); final DataOutputStream dataStream =new DataOutputStream(byteStream); data

我正在尝试为UDP跟踪器实现scrape方法,但我一直得到0个种子/种子作为响应。我仍然得到一个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();
我尝试了不同的追踪器,但得到了相同的响应。有什么问题吗

编辑:添加了所有请求和响应的十六进制转储:

连接请求:

连接响应:

刮取请求:

刮擦响应: 在刮取请求中
transaction\u id
=
0x36
作为单个字节而不是4个字节发送=
0x00000036

info\u hash
作为一个80字节的字符串发送,该字符串是十六进制编码的,每个字符前面都有一个零字节
0x00
,而不是原始的20字节字符串。
0x0031004400310039…
而不是
0x1D19…


Scrape响应没有对等点,因为请求中没有发送信息散列的种子

你到底在通过电话发送和接收什么?你可能会使用Wireshark并发布一个十六进制+ASCII转储。我正在发送一个数据包,上面的字节。我不知道你所说的十六进制+ASCII转储是什么意思。我应该像平常一样抓拍传输吗?把它添加到我的帖子里。很好,但我需要看到完整的对话。例如,连接请求、连接响应、刮取请求和刮取响应OK,再次编辑:)我错过了事务id的dataStream.write而不是dataStream.writeInt,因此修复了该问题。你对如何将散列转换成正确的格式有什么建议吗?或我不懂Java。谢谢你的回答!当有字符串时,它可以与ApacheCommonsHex一起工作,但仍然不知道如何使用信息哈希映射。如果我不明白,也许我会再问一个问题……呵呵,塔克!:-)