2013-11-21 4 views
3

Предположим, я создаю UDP сокет в Python, а затем отправить сообщение с помощью:Какой порт используется мой сокет

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

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

Как узнать, какой порт источника мое сообщение было отправить с?

(я не хочу, чтобы связать мой сокет к любому конкретному порту. Но как я могу узнать, какой источник порт был использован для отправки сообщения?)

ответ

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()) 

НТН

 
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

Если вы не связать UDP сокет, автоматическая привязка происходит, когда вы первый отправить или получить , Итак, getsockname() после этого сообщит вам номер выделенного порта.

Смежные вопросы