Datentransfer Probleme

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Plotus92
User
Beiträge: 3
Registriert: Dienstag 12. Juni 2018, 15:34

Moin Leute,
finde leider im Netzt nichts und mein Tutor konnte mir auch nicht weiterhelfen. Ich möchte gerne Eingaben, die ich in einem GUI getätigt habe, an meinen TCP Server senden. Die Verbindung steht auch etc. Nur leider kommt immer diese Fehlermeldung : File "C:\Users\juliu\Desktop\RCD-Smart-Home-v-0.1-master\Project INF\Client TEST.py", line 73, in getInput
communicate(A)
File "C:\Users\juliu\Desktop\RCD-Smart-Home-v-0.1-master\Project INF\Client TEST.py", line 10, in communicate
client.send(data)
TypeError: a bytes-like object is required, not 'int'

Hier beide Programme

Code: Alles auswählen

import socket
server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
ip = socket.gethostbyname(socket.gethostname())
port = 3030
address = (ip,port)
server.bind(address)
server.listen(2)
print (" Suche Clients ",ip,":",port)
client,addr = server.accept()
print (" Verbindung mit Smart Home ",addr[0],":",addr[1])
while True:
		data = client.recv(1024)
		print (" Folgende Eingabe wurde getätigt : ",data," vom Client ")
		print (" Verarbeite Eingabe ")
		if(data==10):
				client.send(b"Eingabe Erfolgreich")
				print ("Verarbeitung erledigt.\n[*] Antwort gesendet")
		if(data==15):
				client.send(b"Eingabe Erfolgreich")
				print ("Verarbeitung erledigt.\n[*] Antwort gesendet")
		if(data==14):
				client.send(b"Eingabe Erfolgreich")
				print ("Verarbeitung erledigt.\n[*] Antwort gesendet")
		if(data==15):
				client.send(b"Eingabe Erfolgreich")
				print ("Verarbeitung erledigt.\n[*] Antwort gesendet")
		elif(data==b"disconnect"):
				client.send(b"Goodbye")
				client.close()
				break
		else:
				client.send(b"Invalid data")
				print ("Processing Invalid data.\n[*] Replay sent")

Code: Alles auswählen

import socket
import time
from tkinter import*
import random
import tkinter as tk

client=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
client.connect(('Eure IP zum Connecten, meine habe ich mal rausgemacht^^',3030))
def communicate(data):
		client.send(data)
		print (client.recv(1024))
		return		

		#Window Construction

root=Tk()
root.geometry("400x200")
root.title("Light v.1")
root.resizable(False, False)

#Variable Section

BG = Frame(root,width=400,height=200)
BG.pack(side=TOP)

Panel1 = Frame(root,width=200,height=100)
Panel1.pack(side=LEFT)

Info=Label(BG,font=('arial',20,'bold'),text="Time Settings",fg="black",bd=10,anchor='w')
Info.grid(row=0,column=0)

#Clock Section
		
time_one = ''
Info_Time = Label(BG,font = ('arial',20,'bold'),fg = "green",bd = 10,anchor = 'w')
Info_Time.grid(row = 1,column = 0)		
def update_Time():
    global time_one
    time_two = time.strftime('%H:%M:%S')
    # Update String for Time
    if time_two != time_one:
        time_one = time_two
        Info_Time.config(text = time_two)
    #Calling every 200ms
    Info_Time.after(200, update_Time)
update_Time()

#Entry Section

Display1=Entry(Panel1,font=('comic sans',10,'bold'))
Display1.grid(row=1,column=1)
Display2=Entry(Panel1,font=('arial',10,'bold'))
Display2.grid(row=1,column=2)
Display3=Entry(Panel1,font=('arial',10,'bold'))
Display3.grid(row=2,column=1)
Display4=Entry(Panel1,font=('arial',10,'bold'))
Display4.grid(row=2,column=2)

#Text Section

Text1=Label(Panel1,text="Von").grid(row=1,column=0)
Text2=Label(Panel1,text="Bis").grid(row=2,column=0)

Text_Min=Label(Panel1,text="Stunden").grid(row=0,column=1)
Text_Min=Label(Panel1,text="Minuten").grid(row=0,column=2)
#Button Section
def getInput():
    A=int(Display1.get())
    B=Display2.get()
    C=Display3.get()
    D=Display4.get()
    print(A,B,C,D)
    communicate(A)
    time.sleep(5)
    communicate(B)
    time.sleep(5)
    communicate(C)
    time.sleep(5)
    communicate(D)


    global operator
    operator=[A,B,C,D]

b1= Button(BG,text="Apply",command=getInput).grid(row=3)


root.mainloop()
Benutzeravatar
__blackjack__
User
Beiträge: 13004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Plotus92: Du übergibst der `send`-Methode von `socket` eine ganze Zahl, weil Du den Inhalt vom `Entry` `Display1` mit `int()` in eine Zahl umwandelst und die dann `communicate()` übergibst. `send()` will aber etwas vom Typ `bytes` und nicht vom Typ `int`. Was Du da genau machen willst, hängt davon ab was da genau übertragen werden soll.

Grundsätzlich hast Du aber noch ganz andere und ziemlich grosse Probleme. Durch diesen furchtbaren Code wird sich sicher niemand durcharbeiten wollen, und Du wirst ihn ziemlich sicher sehr bald selbst nicht mehr verstehen.

Lass die GUI erst einmal weg und implementiere nur die Programmlogik und teste die. Dann kann man immer noch eine GUI drauf setzen.

Keine Sternchen-Importe. Insbesondere nicht von `tkinter` was Dir cirka 190 Namen ins Modul holt von denen Du kaum etwas benutzt. Du hast ja schon einen `import tkinter as tk`-Import. Nutze das Modul auf diese Weise.

Auf Modulebene sollte nur Code stehen der Konstanten, Klassen, und Funktionen definiert. Keine Variablen auf Modulebene und in den Funktionen/Methoden dementsprechend auch kein ``global``. Vergiss dieses Schlüsselwort am besten. Alles (ausser Konstanten) was eine Funktion oder Methode verwendet sollte sie als Argument betreten und nicht einfach ”magisch” aus der Umgebung kommen.

Du wirst bei GUI-Programmierung nicht um objektorientierte Programmierung herum kommen.

Zur Namensgebung und Quelltextformatierung gibt's den Style Guide for Python Code. Das ist wichtig! Mindestens die Einrückung sollte stimmen, also nicht nur syntaktisch sondern auch die Konvention, und bei den Namen sollten mindestens Konstanten und Klassen mit der konventionellen Schreibweise benannt sein. Was auch beinhaltet das Sachen die keine Konstanten oder Klassen sind, nicht wie welche geschrieben werden sollten.

Das weder `send()` noch `recv()` hier das machen was Du sehr wahrscheinlich glaubst bzw.haben möchtest, hatte glaube ich Sirius3 Dir in einem anderen Thema schon mal gesagt‽
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Antworten