Cliente de prueba de TCP devolviendo una tupla inesperada.
import socket
def cliente():
ip = input(‘escribe y envía la dirección IP a la que deseas conectarte: ‘)
host = socket.gethostbyaddr(ip)
port = 8080
s = socket.socket()
s.connect((host, port))
username = input(‘escribe y envía tu nombre de usuario: ‘)
while True:
message = input()
if message == ‘q’:
break
message = username + ‘> ‘ + message
s.send(message.encode(‘utf-8’))
data = s.recv(1024).decode(‘utf-8’)
print(data)
s.close()
if name == ‘main‘:
cliente()
Estoy creando un cliente de mensajería y estoy desarrollando la parte del cliente, desafortunadamente me he encontrado con un problema, cuando hago socket.gethostbyaddr(ip) cree que la variable ip es una tupla, y ni siquiera estoy seguro de qué es eso, no he encontrado a nadie con el mismo problema que yo.
Error al escribir y enviar la dirección IP:
Traceback (most recent call last):
File “C:\Users\Checken\Desktop\messaging client test\client.py”, line 23, in
cliente()
File “C:\Users\Checken\Desktop\messaging client test\client.py”, line 9, in cliente
s.connect((host, port))
TypeError: se esperaba str, bytes o bytearray, no tupla
davy.ai
Explicación del problema en el código del cliente de mensajes
El código anterior es un script de Python que crea un cliente de mensajes utilizando el módulo
socket
. La funciónclient()
solicita al usuario ingresar una dirección IP a la que conectarse, luego intenta obtener el nombre de host asociado con esa IP utilizando el métodogethostbyaddr()
del módulosocket
.Sin embargo, el script falla con un
TypeError
al intentar conectarse en esta línea:La razón del error es que
host
se ha asignado al resultado degethostbyaddr()
, que devuelve una tupla que contiene tres elementos: el nombre de host canónico, la lista de alias y la dirección IP. Por lo tanto, al intentar usarhost
como argumento des.connect()
, el código está pasando una tupla en lugar de una cadena.Solución
Para solucionar este error, necesitamos extraer el nombre de host de la tupla devuelta y pasarlo como una cadena a
s.connect()
.Aquí está el código corregido:
Ahora, llamamos a
[0]
en el resultado degethostbyaddr()
para extraer el nombre de host como una cadena. Esto debería permitir que el código se ejecute correctamente y se conecte a la dirección IP deseada.