ich versuche grad verzweifelt meinen socket und Thread mithilfe eines Buttons zu schließen.
Wenn ich das Programm starte kann ich mich normal anmelden, Daten übertrage... Läuft.
Wenn ich allerdings das Programm mit BEENDEN schließe, kann ich mich zunächst nicht mehr mit
meiner App auf meinem Handy anmelden (funktioniert auch ), aber sobald ich das Programm
dann erneut starte, wird eine neue Verbindung angezeigt, mein Handy kann sich aber noch
mit der alten IP-Adresse und Port anmelden
Ich möchte, daß das nicht mehr geht.
D.h. wenn ich das Programm beende, will ich mich nur mit der aktuell geöffneten Verbindung
verbinden können, eine alte Verbindung soll durch Klick auf den Button getötet werden.
Ich brauch da Hilfe von außerhalb, da ich schon ziemlich alles durchhabe im Netz.
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import Tkinter
import threading
import socket
import sys
class Testarea():
def main(self):
stop_threads = False
workers = []
root = Tkinter.Tk()
root.title('DMD-DATA.soft')
root.geometry('700x500+385+200')
root.configure(background='black')
start_Server = Tkinter.StringVar()
l_sf1 = Tkinter.Label(root,textvariable=(start_Server),font=('Arial', 8, 'bold'), height=3, width=25, fg="#000000000",justify='left')
l_sf1.place(relx=.15, rely=.9, anchor="c")
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
def run(sock,start_Server,stop):
while True:
get_IP = [TCP_IP for TCP_IP in socket.gethostbyname_ex(socket.gethostname())[2] if not TCP_IP.startswith("127.")][:1]
if TCP_IP.startswith("127."):
start_Server.set("KEIN W-LAN!")
start_Client.set("Um Daten übertragen zu können,\nmuß W-LAN vorhanden sein!")
else:
server_address = ((TCP_IP, 0))
sock.bind(server_address)
TCP_PORT = sock.getsockname()[1]
ipPort = "IP-Adresse: "+str(TCP_IP)+"\n Port: "+str(TCP_PORT)
start_Server.set("SERVER GESTARTET:\n "+ipPort)
sock.listen(5)
while True:
client,addr = sock.accept()
client.send("Hallo, mein Nmae")
data = client.recv(1024)
print data
client.close()
sock.close()
if stop():
break
new_thread = threading.Thread(target=run,args=(sock,start_Server,lambda:stop_threads))
new_thread.start()
print"Thread gestartet..."
def beenden(sock,stop_threads):
sock.close()
stop_threads = True
print("Thread beendet.")
root.destroy()
sys.exit(1)
b2 = Tkinter.Button(root, text=("\nBEENDEN\n"), font=('Arial', 10, 'bold'), width=20, relief="raised", borderwidth=3, fg='#000000000', justify='center',command=lambda:beenden(sock,stop_threads))
b2.place(relx=.51, rely=.52, anchor="c")
root.mainloop()
test = Testarea()
die Daten werden dann genau so oft rübergesendet
und ich erhalte einmal in blauer Schrift die gesendeten Daten und
in rot eine Fehlermeldung:
Code: Alles auswählen
Exception in thread Thread-1:
Traceback (most recent call last):
File "C:\Python27\Lib\threading.py", line 810, in __bootstrap_inner
self.run()
File "C:\Python27\Lib\threading.py", line 763, in run
self.__target(*self.__args, **self.__kwargs)
File "C:\Users\DMD-OL\Documents\Pythoncode\module1.py", line 41, in run
client,addr = sock.accept()
File "C:\Python27\Lib\socket.py", line 206, in accept
sock, addr = self._sock.accept()
File "C:\Python27\Lib\socket.py", line 174, in _dummy
raise error(EBADF, 'Bad file descriptor')
error: [Errno 9] Bad file descriptor
Thread gestartet...