Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

565
Vistas
Error de sockets de Python TypeError: se requiere un objeto similar a bytes, no 'str' con la función de envío

Estoy tratando de crear un programa que abra un puerto en la máquina local y permita que otros se conecten a través de netcat. Mi código actual es.

 s = socket.socket() host = '127.0.0.1' port = 12345 s.bind((host, port)) s.listen(5) while True: c, addr = s.accept() print('Got connection from', addr) c.send('Thank you for connecting') c.close()

Soy nuevo en Python y sockets. Pero cuando ejecuto este código, me permitirá enviar una conexión netcat con el comando:

 nc 127.0.0.1 12345

Pero luego, en mi secuencia de comandos de Python, aparece el error para c.send:

 TypeError: a bytes-like object is required, not 'str'

Básicamente, solo estoy tratando de abrir un puerto, permitir que netcat se conecte y tener un shell completo en esa máquina.

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

El motivo de este error es que en Python 3, las cadenas son Unicode, pero cuando se transmiten en la red, los datos deben ser bytes. Entonces... un par de sugerencias:

  1. Sugiera usar c.sendall() en lugar de c.send() para evitar posibles problemas en los que es posible que no haya enviado el mensaje completo con una sola llamada (ver documentos ).
  2. Para los literales, agregue una 'b' para la cadena de bytes: c.sendall(b'Thank you for connecting')
  3. Para las variables, debe codificar cadenas Unicode en cadenas de bytes (consulte a continuación)

La mejor solución (debería funcionar tanto con 2.x como con 3.x):

 output = 'Thank you for connecting' c.sendall(output.encode('utf-8'))

Epílogo/fondo : esto no es un problema en Python 2 porque las cadenas ya son cadenas de bytes: su código OP funcionaría perfectamente en ese entorno. Las cadenas Unicode se agregaron a Python en las versiones 1.6 y 2.0, pero pasaron a un segundo plano hasta la 3.0, cuando se convirtieron en el tipo de cadena predeterminado. También vea esta pregunta similar así como esta .

over 4 years ago · Santiago Trujillo Denunciar

0

Puede decodificarlo en str con receive.decode('utf_8') .

over 4 years ago · Santiago Trujillo Denunciar

0

Puede cambiar la línea de envío a esto:

 c.send(b'Thank you for connecting')

La b lo convierte en bytes en su lugar.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda