我在bep_0005页中阅读了DHT协议。
但是,当我发送ping查询或find_node查询时,服务器将响应乱码的文本( _router.bittorrent.com:6881_ 或
_dht.transmissionbt.com:6881_ )
这是下面的Java源代码
public String ping(final String id) {
System.out.println("Start ping:" + id);
Bencode bencode = new Bencode();
byte[] encoded = bencode.encode(new HashMap<Object, Object>() {
private static final long serialVersionUID = 4225164001818744013L;
{
put("t", "tr");
put("y", "q");
put("q", "ping");
put("a", new HashMap<Object, Object>() {
private static final long serialVersionUID = -6092073963971093460L;
{
put("id", id);
}
});
}
});
byte[] result = client.send(new String(encoded, bencode.getCharset()));
Map<String, Object> dict = bencode.decode(result, Type.DICTIONARY);
System.out.println("Bdecoded Data:" + dict);
return "";
}
发送数据包
ping查询= {“ t”:“ aa”,“ y”:“ q”,“ q”:“ ping”,“ a”:{“ id”:“
abcdefghij0123456789”}}
bencoded = d1:ad2:id20:abcdefghij0123456789e1:q4:ping1:t2:aa1:y1:qe
添加到bep_0005协议的响应如下:
响应= {“ t”:“ aa”,“ y”:“ r”,“ r”:{“ id”:“ mnopqrstuvwxyz123456”}}
bencoded = d1:rd2:id20:mnopqrstuvwxyz123456e1:t2:aa1:y1:re
但是我的回答是:
响应= {ip = P ,r = {id =2 NisQ J } ͺ F | g},t = tr,y = r}
bencoded = d2:ip6: P 1:rd2:id20:2 NisQ J )ͺ F | ge1:t2:tr1:y1:re
发送udp部分的Java代码是:
public byte[] send(String sendData) {
DatagramSocket client;
try {
client = new DatagramSocket();
client.html" target="_blank">setSoTimeout(5000);
byte[] sendBuffer;
sendBuffer = sendData.getBytes();
InetAddress addr = InetAddress.getByName("router.bittorrent.com");
int port = 6881;
DatagramPacket sendPacket = new DatagramPacket(sendBuffer, sendBuffer.length, addr, port);
client.send(sendPacket);
byte[] receiveBuf = new byte[512];
DatagramPacket receivePacket = new DatagramPacket(receiveBuf, receiveBuf.length);
client.receive(receivePacket);
System.out.println("Client Source Data:" + Arrays.toString(receivePacket.getData()));
String receiveData = new String(receivePacket.getData(), "UTF-8");
System.out.println("Client String Data:" + receiveData);
client.close();
return receivePacket.getData();
} catch (SocketException e) {
e.printStackTrace();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
读取UTF-8中的响应,但是iso-8859-1也是乱码。
谁能帮助我,谢谢!
服务器响应乱码
否,响应将被编码并包含原始二进制数据。
不能将其视为文本。
在BEP5中,为了使示例中的原始二进制node_id可打印,已明智地选择了它仅由字母数字字符组成。
该ip
键是一个扩展的解释:BEP42 - DHT安全扩展
收到的响应是完全有效的。
TODO: Working Java code
问题内容: 我在bep_0005页中阅读了DHT协议。 但是,当我发送ping查询或find_node查询时,服务器将响应乱码的文本( _router.bittorrent.com:6881_ 或 _dht.transmissionbt.com:6881_ ) 这是下面的Java源代码 发送数据包 ping查询= {“ t”:“ aa”,“ y”:“ q”,“ q”:“ ping”,“ a”:{“
问题内容: 在我的Django应用程序中,我想跟踪响应是否已成功发送到客户端。我很清楚,HTTP之类的无连接协议中没有“防水”方式来确保客户端已接收(并显示)响应,因此这不是关键任务功能,但是我仍然想在最近的可能时间。响应将不是HTML,因此无法从客户端进行任何回调(使用Javascript或IMG标签等)。 我可以找到的“最新”钩子是在中间件列表的第一个位置添加实现process_respons
问题内容: 我有一个PHP脚本,需要使用HTTP响应代码(状态代码)进行响应,例如HTTP 200 OK,或一些4XX或5XX代码。 如何在PHP中做到这一点? 问题答案: 我刚刚发现了这个问题,并认为它需要一个更全面的答案: 从 PHP 5.4开始 ,有三种方法可以实现此目的: 自行组装响应代码(PHP> = 4.0) 该函数有一个特殊的用例,可以检测HTTP响应行,并让您用自定义行替换它 但是
问题内容: Expressjs框架具有sendfile()方法。我如何在不使用整个框架的情况下做到这一点。我正在使用node-native- zip创建档案,并将其发送给用户。 问题答案: 这是一个示例程序,它将通过从磁盘流式传输myfile.mp3来发送myfile.mp3(也就是说,在发送文件之前,它不会将整个文件读入内存)。服务器在端口2000上侦听。 [更新] 正如@Aftershock在
在我的JSP页面中,我使用了以下ajax调用(valums-file-上传器)并且文件上传成功。JSF正确调用了适当的Servlet。我正在检查上传的文件并在Servlet中进行服务器端验证。我不确定如何将消息打印回同一个JSP的div。例如。如果一个字段为空,该文件将不会上传,但我还想同时显示一条自定义消息。到目前为止,我已经以String格式存储了消息。我有HttpServletACK对象,但
我们有一份时事通讯,它使用媒体查询,以一种响应式的格式显示出来,适用于较小的屏幕。它在Outlook中按应显示的方式显示,但在转发电子邮件时,Outlook似乎正在删除媒体查询代码。我们正在使用Outlook发送电子邮件,因为我们需要包含exchange列表。有没有人知道Outlook在转发时删除媒体查询代码的方法,或者通过Outlook发送带有媒体查询的电子邮件的另一种方法?