python(三十一)——网络编程:模拟QQ发送消息

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

可以参考上一篇博客:https://blog.csdn.net/qq_36171287/article/details/95670584

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

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

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

 

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

import socket
import threading
import tkinter

win = 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 socket
import threading
import tkinter

win = tkinter.Tk()
win.title("QQ 客户端")
win.geometry("500x500")

ck = None

def 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()

 

运行结果:

服务器启动

三个客户端启动

 

 

 

 

 

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

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

空城机

有钱捧个钱场,没钱捧个人场

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值