Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

556
Views
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 answers
Answer question

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 Report

0

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

over 4 years ago · Santiago Trujillo Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!