Как мне подключиться к UDP-порту в Python? - PullRequest
7 голосов
/ 24 июля 2010

Как и все, я могу сказать: «Я попробовал все!»Я вроде сделал.Я просмотрел весь StackOverflow и перепробовал все ответы, но ничего не получил.В любом случае, я стремлюсь, по крайней мере, получить некоторый код, напечатанный Python, прежде чем я буду еще дальше разрабатывать это.

Я хочу получать UDP-пакеты от моего сервера Garry Mod (logaddress_add MyIP: 7131), и я не надеваюкажется, не получает ни одного из этих пакетов.Скорее всего, это не проблема межсетевого экрана маршрутизатора, так как я могу использовать HLSW на другом компьютере.Я использовал Wireshark и не видел никаких данных с IP-адреса моего сервера.Я использовал интерпретатор Python / сделал некоторый код (хотя примером был TCP), чтобы посмотреть, получил ли я какие-либо данные - чтобы убедиться, что Wireshark не делал ничего плохого - и ничего не получалось.Я делаю что-то глупое?

import socket

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

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

Редактировать: Я проводил некоторые тесты с HLSW и обнаружил, что, похоже, что-то вроде магии.Когда вы пытаетесь logaddress_add определенного порта, который не является HLSW (скажем, 7135), он ничего не будет делать.Wireshark вообще ничего не сделает.Не показывает никаких журналов, ничего.Но когда вы меняете HLSW на порт, который вы только что добавили (7135), Wireshark неожиданно получает поток данных, включая данные консоли, для которых я передаю данные.Это какая-то конфигурация HLSW меняется?

Ответы [ 2 ]

9 голосов
/ 24 июля 2010

(Не совсем ответ, но диагностический путь, который может привести к ответу. Иногда полезно просто знать, что на самом деле это работает для кого-то другого.)

Я ввел вышеупомянутое в консоль Python, а затем ввел приведенный ниже код в другую консоль Python:

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

Сообщение выскочило на оригинальную консоль. Я повторил эксперимент с другой машины, используя вместо этого адрес «192.168 ...», и он снова выскочил.

1 голос
/ 28 апреля 2016

Вам необходимо вызвать sock.connect (('127.0.0.1', 7131)) вместо bind.

...