TypeError: un octets-comme l'objet est nécessaire, ne pas 'str'
Je suis en train de faire un modèle client-serveur, étant python programmation réseau, je suis bloqué sur une erreur qui stipule ce qui suit:-
tcpCliSoc.envoyer ("[%s] %s' % (octets(ctime(), 'utf_8'), données)) TypeError: un octets-comme l'objet est nécessaire, ne pas 'str'
Ici est le Serveur et le client de la mise en œuvre
Serveur TCP mise en œuvre
from socket import *
from time import ctime
HOST = ''
PORT = 21572
ADDR = (HOST, PORT)
BUFFSIZE = 1024
tcpSerSoc = socket(AF_INET, SOCK_STREAM)
tcpSerSoc.bind(ADDR)
tcpSerSoc.listen(5)
while True:
print("waiting for connection......")
tcpCliSoc, addr = tcpSerSoc.accept()
print("connected from", addr)
while True:
data = tcpCliSoc.recv(BUFFSIZE)
if not data:
break
tcpCliSoc.send('[%s] %s' % (bytes(ctime(), 'utf_8'), data))
tcpCliSoc.close()
tcpSerSoc.close()
Client TCP mise en œuvre
from socket import *
__author__ = 'Lamer'
HOST = 'localhost'
PORT = 21572
ADDR = (HOST, PORT)
BUFFSIZE = 1024
tcpCliSoc = socket(AF_INET, SOCK_STREAM)
tcpCliSoc.connect(ADDR)
while True:
data = input('>')
if not data:
break
tcpCliSoc.send(data.encode())
data = tcpCliSoc.recv(BUFFSIZE)
if not data:
break
print(data.decode(encoding='utf-8'))
tcpCliSoc.close()
- A part cela, vous devez utiliser
sock.sendall()
sursock.send()
🙂
Vous devez vous connecter pour publier un commentaire.
La chaîne d'interpolation est la création d'une chaîne de caractères, pas un des octets de l'objet:
(Notez que le résultat est de type
str
-- Et il a un'b'
et quelques citations insérées dans ce que vous ne voulez probablement pas).Vous voulez probablement pour interpoler les octets octets:
Ou, dans votre code:
Dans la ligne
le paramètre
'[%s] %s' % (bytes(ctime(), 'utf_8'), data)
est une chaîne de caractères, pas un tableau d'octets. Même si vous utilisez un des octets de l'objet de la deuxième chaîne de l'espace réservé, l'ensemble de la chaîne mise en forme "[bla] bla" est une chaîne de caractères. Vous devriez être en mesure de régler cette situation est assez facile, avec quelque chose comme:Je suis à l'aide de Python 3.5.1 et confronté à la question de l'envoi et la réception de données.
J'ai résolu l'erreur "TypeError: argument de chaîne sans un encodage" par l'ajout de l'encodage à la fois serveur et client.
Profitez-en !!!
Dharmendra