accept_incoming连接未定义错误来了,我不知道为什么? 所以我粘贴了完整的程序,以便于任何人轻松理解geeting解决方案。
from tkinter import*
import tkinter.messagebox
from tkinter import ttk
import random
import time
import datetime
from socket import AF_INET, socket, SOCK_STREAM
from threading import Thread
def main():
root=Tk()
app=Window1(root)
class Window1:
def __init__(self,master):
self.master=master
self.master.title("Admin Login System")
self.master.geometry('1000x400+120+120')
self.master.config(bg='wheat1')
self.frame=Frame(self.master,bg='wheat1')
self.frame.pack()
self.Username=StringVar()
self.Password=StringVar()
self.lblTitle=Label(self.frame,text="Admin Login",font=('arial',40,'bold'),fg='black',bg='wheat1')
self.lblTitle.grid(row=0,column=0,columnspan=2,pady=40)
############################################################################################################
self.loginFrame=Label(self.frame,width=1100,height=500,font=('arial',15,'bold'),relief='ridge',bg='wheat1',bd=10)
self.loginFrame.grid(row=1,column=0)
self.loginFrame1=Label(self.frame,width=1100,height=500,font=('arial',15,'bold'),relief='ridge',bg='wheat1',bd=10)
self.loginFrame1.grid(row=2,column=0)
#################################################### label ###########################################################
self.lblUsername=Label(self.loginFrame,text='Username',font=('arial',15,'bold'),bd=7)
self.lblUsername.grid(row=0,column=0)
self.txtUsername=Entry(self.loginFrame,font=('arial',15,'bold'),textvariable=self.Username)
self.txtUsername.grid(row=0,column=1)
self.lblPassword=Label(self.loginFrame,text='Password',font=('arial',15,'bold'),bd=7)
self.lblPassword.grid(row=1,column=0)
self.txtPassword=Entry(self.loginFrame,font=('arial',15,'bold'),show='*',textvariable=self.Password)
self.txtPassword.grid(row=1,column=1)
################################################## buttons ##########################################################
self.btnlogin=Button(self.loginFrame1,text='login',width=10,font=('arial',15,'bold'),command=self.Login_System)
self.btnlogin.grid(row=3,column=0,pady=10,padx=5)
self.btnReset=Button(self.loginFrame1,text='Reset',width=10,font=('arial',15,'bold'),command=self.Reset)
self.btnReset.grid(row=3,column=1,pady=10,padx=5)
self.btnExit=Button(self.loginFrame1,text='Exit',width=10,font=('arial',15,'bold'),command=self.Exit)
self.btnExit.grid(row=3,column=2,pady=10,padx=5)
#*************************************************************************************************************************
def Login_System(self):
u=(self.Username.get())
p=(self.Password.get())
if (u=='akash' and p=='giri'):
self.newWindow=Toplevel(self.master)
self.app=Window2(self.newWindow)
else:
tkinter.messagebox.askyesno("Login Systems","Too Bad,invalid login details")
self.Username.set("")
self.Password.set("")
self.txtUsername.focus()
def Reset(self):
self.Username.set("")
self.Password.set("")
self.txtUsername.focus()
def Exit(self):
self.Exit=tkinter.messagebox.askyesno("Login Systems","confirm if u want to exit")
if self.Exit>0:
self.master.destroy()
else:
command=self.new_window
return
def new_window(self):
self.newwindow=Toplevel(self.master)
self.app=Window2(self.newwindow)
class Window2:
def __init__(self,master):
self.master=master
self.master.title("Server")
self.master.geometry('800x500+120+120')
self.master.config(bg='CadetBlue')
self.frame=Frame(self.master,bg='CadetBlue')
self.frame.pack()
self.text=Text(master,width=60,height=30,bd=10,bg='white')
self.text.pack(side=LEFT)
self.button=Button(master,text='Dasboard',width=20,height=2,bg='misty rose',command=self.show)
self.button.pack(side=TOP,pady=30)
self.button1=Button(master,text='Users',width=20,height=2,bg='misty rose')
self.button1.pack(pady=30)
self.button2=Button(master,text='Chat',width=20,height=2,bg='misty rose')
self.button2.pack(pady=30)
self.button3=Button(master,text='Setting',width=20,height=2,bg='misty rose')
self.button3.pack(pady=30)
def accept_incoming_connections(self):
"""Sets up handling for incoming clients."""
while True:
client, client_address = SERVER.accept()
print("%s:%s has connected." % client_address)
client.send(bytes("Greetings from the cave! Now type your name and press enter!", "utf8"))
addresses[client] = client_address
Thread(target=handle_client, args=(client,)).start()
def handle_client(client): # Takes client socket as argument.
"""Handles a single client connection."""
name = client.recv(BUFSIZ).decode("utf8")
welcome = 'Welcome %s! If you ever want to quit, type {quit} to exit.' % name
client.send(bytes(welcome, "utf8"))
msg = "%s has joined the chat!" % name
broadcast(bytes(msg, "utf8"))
clients[client] = name
while True:
msg = client.recv(BUFSIZ)
if msg != bytes("{quit}", "utf8"):
broadcast(msg, name+": ")
else:
client.send(bytes("{quit}", "utf8"))
client.close()
del clients[client]
broadcast(bytes("%s has left the chat." % name, "utf8"))
break
def broadcast(msg, prefix=""): # prefix is for name identification.
"""Broadcasts a message to all the clients."""
for sock in clients:
sock.send(bytes(prefix, "utf8")+msg)
clients = {}
addresses = {}
HOST = ''
PORT = 33000
BUFSIZ = 1024
ADDR = (HOST, PORT)
SERVER = socket(AF_INET, SOCK_STREAM)
SERVER.bind(ADDR)
def show(self):
self.SERVER.listen(5)
a="Waiting for connection..."
self.text.insert(INSERT,a+'\n')
self.ACCEPT_THREAD = Thread(target=self.accept_incoming_connections,args(self))
self.ACCEPT_THREAD.start()
self.ACCEPT_THREAD.join()
self.SERVER.close()
if __name__=='__main__':
main()