2010-07-23 3 views
7

Come tutti gli altri, posso dire "Ho provato tutto!" Ho fatto. Ho cercato su StackOverflow e ho provato tutte le risposte, ma non ho ottenuto nulla. Ad ogni modo, ho intenzione di ottenere almeno un codice stampato da Python prima di andare oltre nello sviluppo di questo.Come connettersi a una porta UDP in Python?

Desidero ricevere pacchetti UDP dal mio server Mod. Garry (logaddress_add MyIP: 7131) e non sembra che stia ricevendo nessuno di questi pacchetti. Molto probabilmente non è un problema con il firewall del router, perché posso usare HLSW sul mio altro computer. Ho usato Wireshark e non ho visto alcun dato dall'IP del mio server. Ho usato l'interprete Python/made some code (anche se l'esempio era TCP) per vedere se ho avuto qualche dato - per accertarmi che Wireshark non stesse facendo qualcosa di sbagliato - e non ci fosse nulla. Sto facendo qualcosa di sciocco?

import socket 

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) 
sock.bind(('0.0.0.0', 7131)) 

sock.settimeout(10) 
sock.recv(1024) 

Edit: mi stava facendo qualche test con HLSW, e abbiamo scoperto che sembra stia facendo una sorta di magia. Quando provate a logaddress_add la determinata porta che non è HLSW (per esempio 7135), non farà nulla. Wireshark non farà nulla. Non mostra alcun registro, nulla. Tuttavia, quando si modifica HLSW per utilizzare la porta appena aggiunta (7135), Wireshark ottiene improvvisamente un flusso di dati, inclusi i dati della console per i quali sto navigando. È una specie di configurazione che HLSW sta cambiando?

+2

Se Wireshark non rileva alcun pacchetto dal server, probabilmente non si ricevono pacchetti dal server. Usare un socket invece di libpcap per fare il rilevamento non cambierà quello. Ti consiglio di concentrarti a capire perché i pacchetti non lo fanno attraverso la rete. Non fare nulla con Python finché non puoi verificare (con Wireshark) che i pacchetti stanno passando. –

+0

Se i pacchetti riescono a passare (per il futuro) quel codice Python sarà sufficiente e ottenere i dati? – Tartio

+0

penso che si stia eseguendo una sorta di "punzonatura del foro udp". – Knobik

risposta

9

(Non proprio una risposta, ma un percorso diagnostico che potrebbe portare a una risposta. A volte è utile solo per sapere che in realtà ha funzionato per qualcun altro.)

ho inserito quanto sopra in una console Python , quindi digitato il codice seguente in un'altra console Python:

import socket 
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) 
sock.sendto('hello', 0, ('127.0.0.1', 7131)) 

Il messaggio è comparso sulla console originale. Ho ripetuto l'esperimento da un'altra macchina, usando invece un indirizzo '192.168 ...', che è saltato fuori di nuovo.

1

È necessario chiamare sock.connect (('127.0.0.1', 7131)) anziché bind.