Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Enviar str a través de un socket
#1
Pues trato de hacer un chat simple con sockets, pero lo que pasa es que en Python 3, no se que le paso a sockets que solo deja enviar informacion binaria.
De ahí viene el problema, ya que aunque trates de convertir lo que introduces con input usando bin(), aun sigue sin funcionar.
Tira este error: TypeError: a bytes-like object is required, not 'str'
Acá está el código:
Cliente:

Código:
[code]
import socket

s = socket.socket()
host = socket.gethostname()
port = 12221

s.connect((host, port))
print('Conectado a: ', host)

while True:
   z = input("> ")
   s.send(z)
   # Halts
   print('[Esperando respuesta...]')
   print(s.recv(1024))

[/code]

y el server:
Código:
[code]
import socket

s = socket.socket()
host = socket.gethostname()
port = 12221
s.bind((host, port))

s.listen(5)
c = None

while True:
  if c is None:
      print('[Esperando conexion...]')
      c, addr = s.accept()
      print('Conexion desde: ', addr)
  else:
      print('[Esperando respuesta...]')
      print(c.recv(1024))
      q = input("> ")
      c.send(q)

[/code]

Saludos
Responder
#2
Hola, estás confundiendo bin con bytes. El primero es un sistema de numeración que solo acepta ceros y unos; el segundo, un conjunto de enteros entre 0 y 255 que a menudo se emplea para representar texto con alguna codificación.

Código:
q = input("> ").encode("utf-8")

Saludos
¡No te pierdas nuestro curso oficial en Udemy para aprender Python, bases de datos SQL, orientación a objetos, tkinter y mucho más!

También ofrecemos consultoría profesional de desarrollo en Python para personas y empresas.
Responder
#3
(26-08-2018, 09:51 PM)Francisco escribió: Hola, estás confundiendo bin con bytes. El primero es un sistema de numeración que solo acepta ceros y unos; el segundo, un conjunto de enteros entre 0 y 255 que a menudo se emplea para representar texto con alguna codificación.

Código:
q = input("> ").encode("utf-8")

Saludos

Gracias Francisco, y perdón por esa estúpida confusión, pero como haría para conectar dos computadores distintos? (en la misma red, lan), ya que el cliente solo se puede ejecutar en la misma máquina que ejecuta el script del server.
Responder
#4
probablemente te faltará abrir los puertos en el firewall de la máquina servidora y quizas tambien en el router (en el caso de que no sea cable directo). En windows suelen dar problemas los antivirus.
Responder
#5
(27-08-2018, 07:15 AM)calvicius escribió: probablemente te faltará abrir los puertos en el firewall de la máquina servidora y quizas tambien en el router (en el caso de que no sea cable directo). En windows suelen dar problemas los antivirus.

Lamentablemente, mi ISP no deja acceder a la configuración del router, ya que me conecto a la ip del router y rechaza la conexion.
Muchas gracias por las respuestas! Smile
Responder
#6
lo que probablemente no te permita el router es hacer NAT Loopback, pero a traves de la ip interna de la red casi seguro que si.

si el router es 192.168.1.1, y por ejemplo:  tu cliente será 192.168.1.2 y el servidor 192.168.1.3. Lo unico que tienes que hacer es asignarles a tus máquinas IPs fijas internas dentro de tu red.
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)