Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何通过gui将聊天室的服务器和客户端(两个不同的程序)变成一个程序,并将客户端和服务器作为对象?_Python_Sockets_Object_Tkinter - Fatal编程技术网

Python 如何通过gui将聊天室的服务器和客户端(两个不同的程序)变成一个程序,并将客户端和服务器作为对象?

Python 如何通过gui将聊天室的服务器和客户端(两个不同的程序)变成一个程序,并将客户端和服务器作为对象?,python,sockets,object,tkinter,Python,Sockets,Object,Tkinter,所以我有一个服务器程序和一个客户端程序。当我开始聊天时,我会运行客户端两次,以便服务器在两个客户端之间连接。我需要把它作为一个有3个对象的程序——两个客户端和服务器。 聊天应用程序是一个gui one-tkinter,一切都运行得很好,所以我只需要了解如何将服务器作为一个对象,并将其用于客户端 服务器: 客户 从socket导入AF\u INET、socket、SOCK\u流 从线程导入线程 进口tkinter def按摩_rec(): 尽管如此: msg=client\u socket.rec

所以我有一个服务器程序和一个客户端程序。当我开始聊天时,我会运行客户端两次,以便服务器在两个客户端之间连接。我需要把它作为一个有3个对象的程序——两个客户端和服务器。 聊天应用程序是一个gui one-tkinter,一切都运行得很好,所以我只需要了解如何将服务器作为一个对象,并将其用于客户端

  • 服务器:
  • 客户
  • 从socket导入AF\u INET、socket、SOCK\u流
    从线程导入线程
    进口tkinter
    def按摩_rec():
    尽管如此:
    msg=client\u socket.recv(大小).decode(“utf8”)
    列表插入(tkinter.END,msg)
    def send_按摩():
    msg=按摩。获取()
    按摩。套装(“”)
    客户端\u socket.send(字节(msg,“utf8”))
    top=tkinter.Tk()
    顶部标题(“聊天框”)
    frame_chat=tkinter.frame(顶部)
    按摩=tkinter.StringVar()
    按摩。设置(“在此处键入!”)
    列表框(frame\u chat,bg=“black”,fg=“red”,height=20,cursor=“heart”,
    宽度=80)
    列表包装(侧面=右侧,填充=两侧)
    列表包装()
    frame_chat.pack()
    字段e=tkinter.Entry(顶部,bg=“绿色”,fg=“蓝色”,cursor=“铅笔”,
    textvariable=按摩)
    字段绑定(“,发送消息”)
    字段包()
    按钮(顶部,fg=“黄色”,bg=“粉色”,cursor=“人”,
    text=“Send:)”,command=Send\u)
    按钮\u text.pack()
    主机=输入('输入主机IP:')
    端口=输入('输入端口:')
    端口=int(端口)
    大小=1024
    地址=(主机、端口)
    客户端\u套接字=套接字(AF\u INET,SOCK\u STREAM)
    客户端\u套接字连接(地址)
    接收线程=线程(目标=按摩线程)
    receive_thread.start()
    tkinter.mainloop()
    
    from socket import AF_INET, socket, SOCK_STREAM
    from threading import Thread
    
    
    def new_connections():
       
        while True:
            client_socket, client_address = server_socket.accept()
            client_socket.send(bytes("HELLO! TYPE YOUR NAME AND PRESS SEND!", "utf8")) 
            Thread(target=client_han, args=(client_socket,)).start()  
    
    
    def client_han(client):
        name = client.recv(SIZE).decode("utf8")
        welcome = 'Welcome %s! ' % name
        client.send(bytes(welcome, "utf8"))  
        msg = "%s has joined the chat!" % name
        display(bytes(msg, "utf8"))  
        clients[client] = name  
        while True:
            msg = client.recv(SIZE)  
            display(msg, name + ": ")  
    
    def display(msg, name=""):
        for i in clients:
            i.send(bytes(name, "utf8")+msg)  
    
    
    clients = {}
    HOST = ''
    PORT = 33000
    SIZE = 1024
    
    server_socket = socket(AF_INET, SOCK_STREAM)
    server_socket.bind((HOST, PORT))
    
    if __name__ == "__main__":
        server_socket.listen(1)
        print("Waiting for connection......")
    
        start_thread = Thread(target=new_connections)
        start_thread.start()
        start_thread.join()
    
        server_socket.close()
    
    from socket import AF_INET, socket, SOCK_STREAM
    from threading import Thread
    import tkinter
    
    
    def massage_rec():
        while True:
            msg = client_socket.recv(SIZE).decode("utf8")
            list_m.insert(tkinter.END, msg)  
    
    
    def send_massage():
        msg = massage.get()  
        massage.set("") 
        client_socket.send(bytes(msg, "utf8"))  
    
    
    top = tkinter.Tk()
    top.title("Chat Box")  
    
    frame_chat = tkinter.Frame(top)  
    massage = tkinter.StringVar()  
    massage.set("Type here!")  
    
    list_m = tkinter.Listbox(frame_chat, bg="black", fg="red", height=20, cursor="heart",
                             width=80) 
    list_m.pack(side=tkinter.RIGHT, fill=tkinter.BOTH)  
    list_m.pack()
    frame_chat.pack()
    
    field_e = tkinter.Entry(top, bg="green", fg="blue", cursor="pencil",
                            textvariable=massage)
    
    field_e.bind("<Return>", send_massage)
    field_e.pack()
    button_text = tkinter.Button(top, fg="yellow", bg="pink", cursor="man",
                                 text="Send :)", command=send_massage)  
    button_text.pack()
    
    HOST = input('Enter host IP: ')
    PORT = input('Enter port: ')
    PORT = int(PORT)
    SIZE = 1024
    ADDRESS = (HOST, PORT)
    
    client_socket = socket(AF_INET, SOCK_STREAM)
    client_socket.connect(ADDRESS)
    
    
    receive_thread = Thread(target=massage_rec)
    receive_thread.start()
    
    tkinter.mainloop()