2010-07-23 14 views
7

Como todos los demás, puedo decir "¡He intentado todo!" Yo lo hice. Busqué en todo StackOverflow e intenté todas las respuestas, pero no obtuve nada. De todos modos, voy a volar para obtener al menos un código impreso por Python antes de ir más allá en el desarrollo de este.¿Cómo me conecto a un puerto UDP en Python?

Quiero recibir paquetes UDP de mi servidor Garry's Mod (logaddress_add MyIP: 7131), y parece que no recibo ninguno de esos paquetes. Lo más probable es que no sea un problema de firewall de enrutador, ya que puedo usar HLSW en mi otra computadora. He usado Wireshark y no he visto ningún dato de la IP de mi servidor. Utilicé el intérprete de Python/made some code (aunque el ejemplo era TCP) para ver si obtenía datos, para asegurarme de que Wireshark no estaba haciendo nada mal, y tampoco conseguí nada. ¿Estoy haciendo algo tonto?

import socket 

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

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

Editar: Estaba haciendo algunas pruebas con HLSW, y descubrí que parece estar haciendo algún tipo de magia. Cuando intenta iniciar sesión_address_add el determinado puerto que no es HLSW (digamos 7135), no hará nada. Wireshark no hará nada en absoluto. No muestra ningún registro, nada. Pero, cuando cambia HLSW para usar el puerto que acaba de agregar (7135), Wireshark de repente obtiene un flujo de datos, incluidos los datos de la consola para los que estoy lanzando. ¿Es algún tipo de configuración que HLSW está cambiando?

+2

Si Wireshark no detecta ningún paquete del servidor, probablemente no recibirá ningún paquete del servidor. Usar un socket en lugar de libpcap para hacer la detección no va a cambiar eso. Te aconsejo que te concentres en descubrir por qué los paquetes no están llegando a la red. No hagas nada con Python hasta que puedas verificar (con Wireshark) que los paquetes están llegando. –

+0

Si los paquetes se cumplen (para el futuro) ¿bastará ese código de Python para obtener datos? – Tartio

+0

Creo que se está llevando a cabo algún tipo de "perforado udp hole". – Knobik

Respuesta

9

(No del todo una respuesta, sino un camino de diagnóstico que podría conducir a una respuesta. A veces ayuda sólo para saber que en realidad trabajó para otra persona.)

He entrado en lo anterior en una consola Python y luego escribió el código siguiente en otra consola de Python:

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

Aparece el mensaje en la consola original. Repetí el experimento desde otra máquina, usando una dirección '192.168 ...' en su lugar, y apareció de nuevo.

1

Debe llamar a sock.connect (('127.0.0.1', 7131)) en lugar de bind.

Cuestiones relacionadas