我的套接字正在使用哪个端口

时间:2013-11-21 00:27:36

标签: python sockets

假设我在python中创建UDP套接字,然后使用:

发送消息
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

sock.sendto(MESSAGE, (DEST_IP, DEST_PORT))

如何找出我的消息发送到哪个源端口?

(我不想将我的套接字绑定到任何特定端口。但是如何找出用于发送消息的源端口?)

2 个答案:

答案 0 :(得分:2)

第一个getsockname()似乎不起作用,但第二个确实起作用。因此,在第一次传输之前,它可能无法获得有效值:

#!/usr/local/cpython-3.3/bin/python

import socket

MESSAGE = b"Hello"
DEST_IP = '127.0.0.1'
DEST_PORT = 12345

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

print(sock.getsockname())
sock.sendto(MESSAGE, (DEST_IP, DEST_PORT))
print(sock.getsockname())

HTH

Help on method getsockname:

getsockname(...) method of socket._socketobject instance
    getsockname() -> address info

    Return the address of the local endpoint.  For IP sockets, the address
    info is a pair (hostaddr, port).

答案 1 :(得分:2)

如果未绑定UDP套接字,则在首次发送或接收时会发生自动绑定。所以getsockname()之后会告诉你分配的端口号。

相关问题