假设我在python中创建UDP套接字,然后使用:
发送消息sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.sendto(MESSAGE, (DEST_IP, DEST_PORT))
如何找出我的消息发送到哪个源端口?
(我不想将我的套接字绑定到任何特定端口。但是如何找出用于发送消息的源端口?)
答案 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()
之后会告诉你分配的端口号。