• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    python实现多人聊天服务器以及客户端

    本文实例为大家分享了python实现多人聊天服务器以及客户端,供大家参考,具体内容如下

    所用python的知识点:

    网络编程:socket

    多线程:threading

    图形化编程:tkinter

    首先要模拟出一个服务器,以供客户端连接,注意这里的要用死循环,要让服务区一直处于开放的状态

    其次要运用多线程,因为多线程共享变量而且可以同时并发的执行操作,否则服务器就只可以连接一个客户端

    下面先附上代码后在解释其怎么操作:

    第一个py文件--服务器

    import tkinter
    import socket, threading
    
    win = tkinter.Tk()  # 创建主窗口
    win.title('模拟服务器')
    win.geometry("400x400+200+20")
    users = {}#用户字典,也可以连接数据库
    
    
    def run(ck, ca):
        userName = ck.recv(1024)#接受客户端发送的信息以1k作为单位这里接受到的信息为byte类型
        users[userName.decode("utf-8")] = ck#解码并储存用户的信息
        #print(users)
        printStr = "" + userName.decode("utf-8") + "连接\n"#在连接显示框中显示是否连接成功
        text.insert(tkinter.INSERT, printStr)
    
        while True:
            rData = ck.recv(1024)#接受客户端发送的信息以1k作为单位这里接受到的信息为byte类型
            dataStr = rData.decode("utf-8")
            infolist = dataStr.split(":")#分割字符串从而得到所要发送的用户名和客户端所发送的信息
            users[infolist[0]].send((userName.decode("utf-8") + "说" + infolist[1]).encode("utf"))
            #要发送信息的客户端向目标客户端发送信息
    
    def start():
        ipStr = eip.get()#从输入端中获取ip
        portStr = eport.get()#从输入端中获取端口,注意端口取得时候不能被占用(可以取8080,9876,等)
        server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)#socked所准守ipv4或ipv6,和相关协议的
        server.bind((ipStr, int(portStr)))#绑定ip和端口号!!!1:注意输入的端口号是str型而这里的要传入int型
        #2:bind()的参数是一个元组的形式
        server.listen(10)#设置监听,和设置连接的最大的数量
        printStr = "服务器启动成功\n"#,是否连接成功
        text.insert(tkinter.INSERT, printStr)#显示在信息窗口中
        while True:#这里用死循环是因为模拟的服务器要一直运行
            ck, ca = server.accept()#接受所连接的客户端的信息
            # 其中ca是ip和端口号组成的元组,ck有关客户端的信息
            t = threading.Thread(target=run, args=(ck, ca))#每连接一个客户端就开启一个线程
            #其中Thread函数中的传入函数的参数也是以元组的形式
            t.start()#开启线程
    
    
    def startSever():
        s = threading.Thread(target=start)#启用一个线程开启服务器
        s.start()#开启线程
    
    #下面是关于界面的操作
    labelIp = tkinter.Label(win, text='ip').grid(row=0, column=0)
    labelPort = tkinter.Label(win, text='port').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=startSever).grid(row=2, column=0)
    text = tkinter.Text(win, height=5, width=30)
    labeltext = tkinter.Label(win, text='连接消息').grid(row=3, column=0)
    text.grid(row=3, column=1)
    win.mainloop()

    第二个py文件---客户端

    import tkinter
    import socket
    import threading
    
    win = tkinter.Tk()
    win.title("客户端2")
    win.geometry("400x400+200+20")
    
    ck = None#用于储存客户端的信息
    
    
    def getInfo():
        while True:
            data = ck.recv(1024)#用于接受服务其发送的信息
            text.insert(tkinter.INSERT, data.decode("utf-8"))#显示在信息框上
    
    
    def connectServer():
        global ck
        ipStr = eip.get()
        portStr = eport.get()
        userStr = euser.get()
        client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)#socked所准守ipv4或ipv6,和相关协议的
        client.connect((ipStr, int(portStr)))#连接ip和端口号!!!1:注意输入的端口号是str型而这里的要传入int型
        #2:bind()的参数是一个元组的形式
        client.send(userStr.encode("utf-8"))
        ck = client
    
        t = threading.Thread(target=getInfo)
        t.start()
    
    
    def sendMail():
        friend = efriend.get()
        sendStr = esend.get()
        sendStr = friend + ":" + sendStr
        ck.send(sendStr.encode("utf-8"))
    
    
    #下面是界面
    labelUse = tkinter.Label(win, text="userName").grid(row=0, column=0)
    euser = tkinter.Variable()
    entryUser = tkinter.Entry(win, textvariable=euser).grid(row=0, column=1)
    
    labelIp = tkinter.Label(win, text="ip").grid(row=1, column=0)
    eip = tkinter.Variable()
    entryIp = tkinter.Entry(win, textvariable=eip).grid(row=1, column=1)
    
    labelPort = tkinter.Label(win, text="port").grid(row=2, column=0)
    eport = tkinter.Variable()
    
    entryPort = tkinter.Entry(win, textvariable=eport).grid(row=2, column=1)
    
    button = tkinter.Button(win, text="启动", command=connectServer).grid(row=3, column=0)
    text = tkinter.Text(win, height=5, width=30)
    labeltext= tkinter.Label(win, text="显示消息").grid(row=4, column=0)
    text.grid(row=4, column=1)
    
    esend = tkinter.Variable()
    labelesend = tkinter.Label(win, text="发送的消息").grid(row=5, column=0)
    entrySend = tkinter.Entry(win, textvariable=esend).grid(row=5, column=1)
    
    efriend = tkinter.Variable()
    labelefriend= tkinter.Label(win, text="发给谁").grid(row=6, column=0)
    entryFriend = tkinter.Entry(win, textvariable=efriend).grid(row=6, column=1)
    
    button2 = tkinter.Button(win, text="发送", command=sendMail).grid(row=7, column=0)
    win.mainloop()

    这里的客户端可以是多个,也就是将第二个py文件复制几分并分别储存在不同的文件中

    这里注意:在pycharm中最好在一个项目中打开

    1:将第一个文件命名为sever.py然后运行sever.py文件会出现

    其中第一行表示你的主机的ipv4地址,如果你用的window,不知道的可以打开cmd后输入ipconfig可以看到你的ipv4地址

    第二行表示的是端口,这里最好用大一点8080或9876等,要不就会出现端口占用情况,这里我用9876

    最后输入前两行后点击启动

    2、将第二个文件多复制遍,分别命名为01.py,02.py......,运行01.py文件

    这里第一行输入的是你的用户名,注意可以是任意的字符

    第二行输入的是你要连接的服务器的ip这里写你的ip(和上面的ip一样)

    第三行输入的是端口注意第一个图上写的端口保持一致上

    然后点击启动

    然后在运行02.py,重复01.py中的操作但是注意用户名不能相同,二ip和端口号是相同的

    如果你想更多的连接更多的客户端可以运行0.3.py重复02.py操作

    3、到这里假设你创建了01.py和02.py并运行其中0.1.py中的userName为123,02.py的userName为456并且连个ip和端口号和sever.py中的ip和端口号相同,然后就可以操作两个人的聊天了

    打开运行01.py后的界面输入

    然后点击发送

    然后打开02.py运行后的界面会出现下面的

    这样就实现了用python模拟多人聊天服务器以及客户端(带图形化界面)的目标。

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

    您可能感兴趣的文章:
    • python的tkinter布局之简单的聊天窗口实现方法
    • 教你用Python创建微信聊天机器人
    • python操作微信自动发消息的实现(微信聊天机器人)
    • 基于Python如何使用AIML搭建聊天机器人
    • 快速实现基于Python的微信聊天机器人示例代码
    • Python实现聊天机器人的示例代码
    • Python QQBot库的QQ聊天机器人
    • python实现聊天小程序
    • Python基于Socket实现的简单聊天程序示例
    • 使用Python AIML搭建聊天机器人的方法示例
    上一篇:Python利用ROI进行图像合成的问题小结
    下一篇:Python中文纠错的简单实现
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    python实现多人聊天服务器以及客户端 python,实现,多人,聊天,服务器,