2013-11-21 34 views
3

假設我在Python中創建一個UDP套接字,然後使用發送郵件:哪個端口正在使用我的插座

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

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

如何找出源端口我的消息是從發送?

(我不想我的套接字綁定到任何特定的端口,但我怎麼找出源端口是用來發送郵件?)

回答

2

第一getsockname()不出現工作,但第二個呢。因此,也許它並沒有得到有效的值,直到第一次傳輸後:如果沒有綁定UDP套接字

#!/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). 
2

,自動綁定時發生您第一次發送或接收。所以getsockname()之後會告訴你分配的端口號。