【问题标题】:What is the second part of the address returned by recvfrom?recvfrom 返回的地址的第二部分是什么?
【发布时间】:2011-08-09 16:01:21
【问题描述】:

我正在使用来自http://wiki.python.org/moin/UdpCommunication 的那两段代码

服务器:

import socket

UDP_IP="127.0.0.1"
UDP_PORT=5005

sock = socket.socket( socket.AF_INET, # Internet
                      socket.SOCK_DGRAM ) # UDP
sock.bind( (UDP_IP,UDP_PORT) )

while True:
    data, addr = sock.recvfrom( 1024 ) # buffer size is 1024 bytes
    print "received message:", data,"from", addr

客户:

import socket

UDP_IP="127.0.0.1"
UDP_PORT=5005
MESSAGE="Hello, World!"

print "UDP target IP:", UDP_IP
print "UDP target port:", UDP_PORT
print "message:", MESSAGE

sock = socket.socket( socket.AF_INET, # Internet
                      socket.SOCK_DGRAM ) # UDP
sock.sendto( MESSAGE, (UDP_IP, UDP_PORT) )

在服务器中,我修改了最后一行:

        print "received message:", data,"from", addr

因此它会打印发送消息的地址。 在我的 macbook 上,端口似乎是 40000 或 65000 之间的某个随机数(我只是确定它看起来是随机的)。

知道这可能是什么吗?

【问题讨论】:

    标签: python sockets networking udp


    【解决方案1】:

    这是客户端用来向服务器发送数据的ephemeral port

    【讨论】:

    • 我不太了解这种端口的实用性,这个端口是在这里,所以一个应用程序有一个改变来做出某种回答吗?
    • 这个想法是,需要长时间监听的重要事物需要较低数量的端口,因此客户端应用程序不会妨碍它们,而是从任何高范围端口发送当时可用。
    • 我的意思是我不能指定要使用的端口吗?
    • 为客户端发送 FROM?不,你为什么想要?重要的是服务器发送 FROM 和客户端发送 TO 的端口。
    • 我理解范围的事情,但是这个端口的目的是什么?我能用它做什么?我只想使用一个特定的端口...
    【解决方案2】:

    绝对是港口。您可以在发件人端使用print sock.getsockname() 进行验证。

    你也可以用 e 故意设置它。 G。 sock.bind(('', 54312))sock.sendto() 行之前。

    这在软件检查发送方端口范围的情况下可能很有用:端口 0..1023 是特权端口 - 在许多操作系统下,仅允许 root 绑定到这些端口。

    但是,在大多数情况下,更改它是没有意义的,因此最好保持原样。

    此端口的含义是元组的第 4 个元素,用于标识连接或连接的对应物。元组是(source_ip、source_port、destination_ip、destination_port)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-02-02
      • 2019-03-24
      • 2018-07-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-15
      • 2012-02-27
      相关资源
      最近更新 更多