如何使用twisted通过UDP协议发送参数

Posted

技术标签:

【中文标题】如何使用twisted通过UDP协议发送参数【英文标题】:How to send the parameter with UDP protocol using twisted 【发布时间】:2012-12-23 17:15:03 【问题描述】:

如何使用 twisted 连接到以下 url 并从跟踪器获取响应。 udp://tracker.publicbt.com:80/announce?uploaded=0&downloaded=0&compact=1&event=started&peer_id=kovid_agarwal1235467&port=6881&info_hash=3389809f0c9096819294a680beb4adb96a738419&left=763922958

我尝试了以下代码,但出现连接 ID 不匹配错误

from twisted.internet.protocol import DatagramProtocol
from MakeUrlRequest import  encoded_Value


class SendAndReceiveUDP(DatagramProtocol):

    def startProtocol(self):
        self.transport.connect("31.172.124.3",80)
        self.transport.write(encoded_Value())


    def datagramReceived(self, datagram, addr):
        print "Received %r" %datagram
from twisted.internet import reactor
udpclient=SendAndReceiveUDP()
reactor.listenUDP(6881,udpclient)
reactor.run()

encoded_Value 上面的值不过是如下值: Upload=0&downloaded=0&compact=1&event=started&peer_id=kovid_agarwal1235467&port=6881&info_hash=3389809f0c9096819294a680beb4adb96a738419&left=763922958

【问题讨论】:

【参考方案1】:

根据http://en.wikipedia.org/wiki/UDP_tracker,用于与 Bittorrent 跟踪器交换数据的基于 UDP 的协议使用“自定义二进制格式”。您发送的数据看起来不符合这种格式。因此,您收到的错误可能表明您需要以不同的方式格式化您的请求。有关该格式的更多详细信息,请参阅http://www.bittorrent.org/beps/bep_0015.html

【讨论】:

谢谢我从下面提到的链接中得到了答案。 bittorrent.org/beps/bep_0015.html#udp-tracker-protocol 感谢 Jean 的支持...!

以上是关于如何使用twisted通过UDP协议发送参数的主要内容,如果未能解决你的问题,请参考以下文章

Twisted - 如何创建多协议进程并在协议之间发送数据

如何从协议外部发送 Autobahn/Twisted WAMP 消息?

如何实现可靠的 UDP 协议?

如何通过udp获取直播源代码

如何编程使上位机(界面c#)与下位机(单片机keil c)通过TCP/UDP协议来实现通信,最好有源代码,谢谢~~

Twisted:使用 pyglet-twisted 时如何从 EndPoint 调用 Deferred