#python #http #udp
#python #http #udp
Вопрос:
Итак, в настоящее время я пытаюсь отправить udp на сервер с веб-доменом, подобным этому www.example.com/path?stuff=exist
В настоящее время я пытаюсь использовать сокет, и это пример моего кода
import socket
IPADDR = '64.233.177.139'
that is the ip of google, and not the ip I am currently trying to send to
PORTNUM = 9001
PACKETDATA = '42["message","test"]'
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, 0)
s.connect((IPADDR, PORTNUM, '/path?stuff=exist'))
s.send(PACKETDATA)`
И в настоящее время я получаю эту ошибку
TypeError: getsockaddrarg() takes exactly 2 arguments (3 given)
Я новичок в использовании библиотеки сокетов и немного покопался, но безрезультатно.
Для получения некоторого дополнительного контекста я просто хочу отправить данные PACKETDATA
на сервер google.com/path?stuff=exist
(на самом деле это не тот URL, просто пример) Что-нибудь помогает, заранее спасибо.
Ответ №1:
Ваша непосредственная проблема программирования заключается в том, что socket.connect
ожидается вызов с аргументом, который представляет собой кортеж, содержащий ровно два элемента — строку имени хоста (или IP-адреса) и номер порта. Но эта программа передает кортеж аргументов, который содержит 3 элемента — адрес хоста, номер порта и строку '/path?stuff=exist'
. Вот почему сообщение об ошибке жалуется на нахождение 3 вещей, где ожидалось только 2.
Если вы хотите отправить '/path?stuff=exist'
через UDP, вам придется включить его в часть данных дейтаграммы. Вам также придется придумать какой-то способ отличить его от PACKETDATA
, который вы уже вводите в тело дейтаграммы. (Это не обязательно должно быть необычным. Вы могли бы просто вставить пробел между строкой path и PACKETDATA
.)
Здесь также может быть концептуальная проблема. Веб-сервер прослушивает только трафик TCP. Он не прослушивает UDP-трафик. Итак, если вы не предусмотрели, чтобы на вашем конкретном сервере был какой-то прослушиватель, принимающий дейтаграммы на целевом UDP-порту, ничто на стороне сервера не будет собирать этот трафик даже после того, как вы выяснили, как заставить Python отправлять его.