python(三十一)——网络编程:模拟QQ发送消息
发布日期:2021-06-30 16:35:40 浏览次数:4 分类:技术文章

本文共 3501 字,大约阅读时间需要 11 分钟。

网络编程:模拟QQ发送消息

可以参考上一篇博客:

里面有客户端与服务器之间信息传输

这是模拟QQ的消息发送功能制作的、

其中的client和client1,client2代码一样,都是一个客户端,客户端之间通过server服务器来进行消息的互相传递

 

python的创建的server服务器代码:

import socketimport threadingimport tkinterwin = tkinter.Tk()win.title("QQ Server")win.geometry("500x500")#账号users = {}def run(ck,ca):    username = ck.recv(1024)    users[username.decode("utf-8")] = ck    print(users)    while True:        rData = ck.recv(1024)        dataStr = rData.decode("utf-8")        infolist = dataStr.split(":")        users[infolist[0]].send((username.decode('utf-8')+"说:"+infolist[1]+"\n").encode('utf-8'))    # printStr = username + "链接"    # text.insert(tkinter.END,printStr)def start():    ipStr = eip.get()    portStr = eport.get()    server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)    # 绑定IP端口    server.bind((ipStr, int(portStr)))    # 监听    server.listen(10)    printStr = '服务器启动成功......'    text.insert(tkinter.INSERT, printStr)    while True:        # 等待链接        clientSocket, clientAddress = server.accept()        print("%s---%s 连接成功" % (str(clientSocket), (clientAddress)))        t = threading.Thread(target=run, args=(clientSocket, clientAddress))        t.start()#定义方法def startSrever():    s = threading.Thread(target=start)    s.start()labelIp = tkinter.Label(win,text = "ip",font=("黑体",10)).grid(row=0,column = 0)labelPort = tkinter.Label(win,text = "port",font=("黑体",10)).grid(row=1,column = 0)#绑定变量eip = tkinter.Variable()eport = tkinter.Variable()entryIp = tkinter.Entry(win,textvariable=eip).grid(row=0,column = 1)entryPort = tkinter.Entry(win,textvariable=eport).grid(row=1,column = 1)button = tkinter.Button(win,text="启动",command=startSrever).grid(row=2,column = 0)text = tkinter.Text(win,width=30,height = 10)text.grid(row=3,column = 0)win.mainloop()

 

python的client代码:

import socketimport threadingimport tkinterwin = tkinter.Tk()win.title("QQ 客户端")win.geometry("500x500")ck = Nonedef getInfo():    while True:        data = ck.recv(1024)        text.insert(tkinter.INSERT, data.decode('utf-8'))def connectSrever():    global ck    ipStr = eip.get()    portStr = eport.get()    userStr = euser.get()    client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)    client.connect((ipStr, int(portStr)))    client.send(userStr.encode('utf-8'))    ck = client    #等待接收数据    t = threading.Thread(target=getInfo)    t.start()def sendMail():    sendstr = eSend.get()    friend = efriend.get()    sendStr = friend + ":" + sendstr    ck.send(sendStr.encode('utf-8'))labelUser = tkinter.Label(win,text = "UserName",font=("黑体",10)).grid(row=0,column = 0)labelIp = tkinter.Label(win,text = "ip",font=("黑体",10)).grid(row=1,column = 0)labelPort = tkinter.Label(win,text = "port",font=("黑体",10)).grid(row=2,column = 0)euser = tkinter.Variable()eip = tkinter.Variable()eport = tkinter.Variable()entryUser = tkinter.Entry(win,textvariable=euser).grid(row=0,column = 1)entryIp = tkinter.Entry(win,textvariable=eip).grid(row=1,column = 1)entryPort = tkinter.Entry(win,textvariable=eport).grid(row=2,column = 1)button = tkinter.Button(win,text="连接",command=connectSrever).grid(row=3,column = 0)text = tkinter.Text(win,width=30,height = 10)text.grid(row=4,column = 0)eSend = tkinter.Variable()entrySend = tkinter.Entry(win,textvariable=eSend).grid(row=5,column = 0)efriend = tkinter.Variable()entryFriend = tkinter.Entry(win,textvariable=efriend).grid(row=6,column = 0)button2 = tkinter.Button(win,text="发送",command=sendMail).grid(row=6,column = 1)win.mainloop()

 

运行结果:

服务器启动

三个客户端启动

 

 

 

 

 

一起学习,一起进步 -.- ,如有错误,可以发评论

转载地址:https://kongchengji.blog.csdn.net/article/details/99580141 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:HTML回流与重绘
下一篇:牛客网错题集

发表评论

最新留言

做的很好,不错不错
[***.243.131.199]2024年04月08日 14时28分11秒