Type Error tritt beim Netzwerk-Datenstreaming auf

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
Wiefreak.de
User
Beiträge: 1
Registriert: Sonntag 1. Dezember 2013, 21:11

Hallo,
vielleicht ist das Thema etwas ungenau formuliert, ich wusste aber nicht wie ich es besser beschreiben sollte. Ich bin gerade in die Netzwerkprogrammierung mit Python eingestiegen. Ich habe mir ein simples Script aus dem Internet zum Testen gesucht. Es soll einfach nur eine Nachricht zu einer bestimmten IP-Adresse senden. Ich benutze Python 3.3.

Code: Alles auswählen

import socket

ip = input("IP-Adresse: ") 
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
s.connect((ip, 50000))

try: 
    while True: 
        nachricht = input("Nachricht: ") 
        s.send(nachricht) 
        antwort = s.recv(1024) 
        print ("[%s] %s" % (ip,antwort)) 
finally: 
    s.close()
Einen entsprechenden Server habe ich auf einem anderen Computer in meinem Netzwerk laufen. Das Script läuft ohne Syntaxfehler und auch die Connection wird vom Server-Programm zugelassen. Wenn ich nun jedoch die zu sendende Nachicht eingebe, erscheint sofort:

Code: Alles auswählen

Traceback (most recent call last):
  File "C:/Users/Wiefreak/Desktop/client.py", line 10, in <module>
    s.send(nachricht)
TypeError: 'str' does not support the buffer interface
Es scheint, als würde ihm die Tatsache, das ich einen String senden will, nicht passen. Allerdings erhalte ich diesen Error auch bei den Nachichten:

-"Test"
-a
-1

Also auch mit anführungszeichen, als char oder normaler integer.
Was kann ich tuen, damit ich daten (möglichst Strings) senden kann ?
Danke schonmal
MfG Wiefreak.de
BlackJack

@Wiefreak.de: Du kannst nur Bytes versenden und keine Zeichenketten. Also musst Du die Zeichenkette(n) erst zu Bytes kodieren. Und beim Empfang dann wieder dekodieren.

Der Code ist übrigens nicht besonders gut da weder von `send()` garantiert wird, das auch alles was man da übergeben hat gesendet wird, noch empfängt `recv()` zwingend alles was auf der anderen Seite in einem Aufruf gesendet wurde. Das kann sowohl mehr, als auch weniger sein. TCP ist ein Datenstrom und `recv()` kann davon einen beliebigen Ausschnitt liefern.
Antworten