andyah
Goto Top

Python3 - Meldung cant concat byte to string

Hi NG,

bei folgendem Code habe ich die Fehlermeldung: can't concat byte to string.

from socket import *

#Localhost
myHostName = ''  
myPort = 5007

#als Antwort die sortierte Eingabe
def answers(s):
	s = s + "zurück" #Fehlermeldung: can't concat byte to string  

# Hauptsocket   
mainsocket = socket(AF_INET, SOCK_STREAM)
# an HostName und Port binden
mainsocket.bind((myHostName, myPort))
# max. Verbindungen gleichzeitig (hier eine)
mainsocket.listen(1)

while 1:
	#Clientsocket
	connection, address = mainsocket.accept()
	print("Serveradresse: ",address)  
	while(1):
		#max. 1024 Byte lesen
		data = connection.recv(1024)
		#wenn keine Daten mehr, request anzeigen
		if not data: 
			break
		#Daten ausgeben
		print("empfangen: ",data)  
		#verabeiteten String zurückgeben
		connection.send(answers(data))
#Verbindung schließen  
connection.close()  

Ich habe bei Google keine Lösung gefunden, die funktioniert.

Wo ist mein Problem?

Gruß
Andy

Content-ID: 269065

Url: https://administrator.de/contentid/269065

Ausgedruckt am: 08.11.2024 um 05:11 Uhr

SlainteMhath
SlainteMhath 14.04.2015 um 09:36:57 Uhr
Goto Top
Moin,

socket.recv(bufsize[, flags])
Receive data from the socket. The return value is a bytes object
Quelle: https://docs.python.org/3/library/socket.html

Lösung
[...] answer(data.decode("utf-8")) [...]  

(Gefunden mit Google innerhalb 3 minuten :P )

lg,
Slainte
AndyAh
AndyAh 14.04.2015 aktualisiert um 10:14:36 Uhr
Goto Top
Hi,

auf die Seite bin ich zwar auch gestoßen, kann diese mangels Sprachkenntnissen nicht lesen!

Bei deiner Lösung erhalte ich eine neue Fehlermeldung: 'NoneType' does not supported the buffer interface.

Gruß
Andy
SlainteMhath
SlainteMhath 14.04.2015 um 10:14:43 Uhr
Goto Top
Das liegt vermutlich daran das deine "answer" function eigentlich keinen Wert zurück gibt.

Versuchs mal mit:
def answers(s): 
	return s +  "zurück"    

Evtl. währe es sinnvoller wenn du dich erstmal mit den Basics von Python beschäftigst anstatt dich gleich auf die Programmierung von Sockets zu stürzen.

kann diese mangels Sprachkenntnissen nicht lesen!
Da wird's dann allerdings im Internet eher schwierig...
AndyAh
AndyAh 14.04.2015 um 10:26:45 Uhr
Goto Top
Hi,

der Server funktioniert zwar jetzt, aber ich habe die Fehlermeldung nun im Clientteil.

from socket import *

#Verbindungsdaten des Servers (hier Localhost)
serverHostName = '127.0.0.1'  
serverPort = 5007

#Socket erzeugen
clientsocket = socket(AF_INET, SOCK_STREAM)
#Verbindung herstellen
clientsocket.connect((serverHostName, serverPort))

#sende Daten
def sende(s):
	#Daten senden
	clientsocket.send(s) # 'str' does not supported the buffer interface 
	#Antwort empfangen
	data = clientsocket.recv(1024)
	#Antwort ausgeben
	print("Empfagen: ",data)  

sende("Teststring")  

#Verbindung schließen
clientsocket.close()

#Auf Taste warten
input()

Gruß
Andy
SlainteMhath
SlainteMhath 14.04.2015 um 10:33:33 Uhr
Goto Top
Lies doch bitte mal ein bischen in der Python Doku... .send verwendet, wie .recv auch, Byte Objects und keine Strings als Parameter. Da musst vor- bzw. nachher entsprechend umwandeln.
114757
114757 14.04.2015 aktualisiert um 10:47:02 Uhr
Goto Top
Zitat von @AndyAh:
der Server funktioniert zwar jetzt, aber ich habe die Fehlermeldung nun im Clientteil.
Du scheinst echt keinen Plan zu haben was du da machst ... wenn du den Typ in einen String umwandelst musst du ihn hinterher wieder zu einem Bytearray wandeln ... bytearray(s) Da Daten eben nur als ByteArray gesendet werden können.

Les besser erst mal die Grundlagen anstatt zu frickeln ...

Gruß jodel32