socket español python string sockets send

español - socket python 3



Python Socket Send Buffer vs. Str (2)

Estoy tratando de obtener un servidor básico (copiado de Beginning Python) para enviar un str.

El error:

c.send( "XXX" ) TypeError: must be bytes or buffer, not str

Parece que funciona al decapado de un objeto. Todos los ejemplos que encontré, parecen ser capaces de enviar una cadena sin problemas.

Cualquier ayuda sería apreciada,

Stephen

import socket import pickle s = socket.socket() host = socket.gethostname() port = 80 s.bind((host, port)) s.listen(5) while True: c, addr = s.accept() print( "Got Connection From ", addr ) data = pickle.dumps(c) c.send( "XXX" ) #c.send(data) c.close()


Para agregar a la respuesta de Jacek Konieczny: También puede usar str.encode () para obtener bytes de una cadena. Si tiene la cadena en una variable en lugar de un literal, puede invocar codificar y devolverá una serie equivalente de bytes.


Parece que intentas utilizar los ejemplos de Python 2.x en Python 3 y tocas una de las principales diferencias entre esas versiones de Python.

Para Python <3 ''strings'' son de hecho cadenas binarias y ''objetos unicode'' son los objetos de texto correctos (ya que pueden contener cualquier carácter Unicode).

En Python 3, las cadenas unicode son las "cadenas regulares" (str) y las cadenas de bytes son objetos separados.

La E / S de nivel bajo solo se puede hacer con datos (cadenas de bytes), no texto (secuencia de caracteres). Para Python 2.x str también era del tipo ''datos binarios''. En Python 3 ya no existe y se debe usar uno de los objetos especiales de "datos". Los objetos se escabean a tales cadenas de bytes. Si desea ingresarlos manualmente en el código, use el prefijo "b" (b "XXX" en lugar de "XXX").