Я понял, почему я получаю: TypeError: getsockaddrarg: адрес AF_INET должен быть кортеж, а не str - PullRequest
0 голосов
/ 26 апреля 2018

Окей, я давно смотрю на эти два кода и не могу понять, почему я получаю эту ошибку: TypeError: getsockaddrarg: адрес AF_INET должен быть кортежем, а не str.

code1.py: гнездо для импорта s = socket.socket (socket.AF_INET, socket.SOCK_DGRAM)

import echoUDP

serveraddress = '0.0.0.0'
serverport = 5002

server2 = (server_address, server_port)
s.bind(server2)
print("Listening on " + server_address + ":" + str(server_port))
s.connect(('0.0.0.0',5005))

while True:
    client_address = ('0.0.0.0.')
    status = 'ok'
    print("Echoing back"+ str(status) + " to " + str(client_address))
    sen = s.sendto(status.encode(),clientaddress)

echoUDP.py:

import socket

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

server_address = '0.0.0.0'
server_port = 5005

server = (server_address, server_port)
sock.bind(server)
print("Listening on " + server_address + " Port: " + str(server_port))
sock.connect(('0.0.0.0', 5002))
while True:
    client_address = ('0.0.0.0')
    status = 'ok'
    print("Echoing back "+ str(status) + " to " + str(client_address))
    sen = sock.sendto(status.encode(),client_address)

Может кто-нибудь сказать, что я не получаю? Я прочитал другие проблемы с кортежем, и они получили его, потому что их строка sendto, client_address, не является кортежем. Я думал, что создал это как кортеж, когда я пишу client_address = ('0.0.0.0')?

1 Ответ

0 голосов
/ 26 апреля 2018

Второй аргумент sock.sendto() должен быть кортежем, содержащим хост и порт - например, ('0.0.0.0', 5005). Так что в вашем коде используйте:

sen = sock.sendto(status.encode(), (server_address, server_port))

Кстати, ('0.0.0.0') - это не кортеж. ('0.0.0.0',) будет кортежом длины 1. Круглые скобки необязательны для создания кортежа в Python - это наличие запятой, которая сообщает Python, что вы создаете кортеж. Эти примеры должны иллюстрировать.

a = 1,
type(a)
>>> tuple

b = 1, 2
type(b)
>>> tuple

c = (1)
type(c)
>>>> int
...