Python 如何通过gui将聊天室的服务器和客户端(两个不同的程序)变成一个程序,并将客户端和服务器作为对象?
所以我有一个服务器程序和一个客户端程序。当我开始聊天时,我会运行客户端两次,以便服务器在两个客户端之间连接。我需要把它作为一个有3个对象的程序——两个客户端和服务器。 聊天应用程序是一个gui one-tkinter,一切都运行得很好,所以我只需要了解如何将服务器作为一个对象,并将其用于客户端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
从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()