<p>如果使用UDP,则端点由以下任一项确定:</p>
<ol>
<li>在套接字上调用<code>bind()</code>,并显式地给它一个地址</li>
<li>发送数据包</li>
</ol>
<p>如果你想要更多的细节,<a href="https://stackoverflow.com/questions/1516972/udp-socket-port-allocation-failure/1517027#1517027">check this response</a>。在</p>
<p>问题是我对twisted不太熟悉。从我快速阅读资料中可以看出,您可能希望使用<a href="http://twistedmatrix.com/documents/8.2.0/api/twisted.internet.default.SelectReactor.html" rel="nofollow noreferrer">^{<cd2>}</a>这样的反应堆。这就是<a href="http://twistedmatrix.com/trac/browser/tags/releases/twisted-8.2.0/twisted/names/dns.py#L1664" rel="nofollow noreferrer">^{<cd3>} does under the hood</a>。在</p>
<p>如果将<code>twisted</code>从图片中取出,则下面的片段将显示发生了什么:</p>
<pre><code>>>> import socket
>>> s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, 0)
<socket._socketobject object at 0x10025d670>
>>> s.getsockname() # this is an unbound or unnamed socket
('0.0.0.0', 0)
>>> s.bind( ('0.0.0.0', 0) ) # 0.0.0.0 is INADDR_ANY, 0 means pick a port
>>> s.getsockname() # IP is still zero, but it has picked a port
('0.0.0.0', 56814)
</code></pre>
<p>如果需要支持多个网络接口或IPv4和IPv6,那么获取主机名有点麻烦。如果可以使使用的接口可配置,那么将其作为元组的第一个成员传递给<code>socket.bind()</code>,这样就设置好了。在</p>
<p>现在最困难的部分是在twisted提供的抽象范围内完成这项工作。不幸的是,我在那帮不了什么忙。我建议您寻找有关如何访问底层套接字或找到将套接字信息传递到框架中的方法的示例。在</p>
<p>祝你好运。在</p>