您好,欢迎访问三七文档
发布一个用Python实现的一个在线聊天,主要功能是实现客户端与服务器端的双向通信,这个小东西用到的主要知识点:发布一个用Python实现的一个在线聊天,主要功能是实现客户端与服务器端的双向通信,这个小东西用到的主要知识点:1.PythonSocket;2.PythonTkinter库。当然也应该了解如下的基础知识:1.Python基本语法;2.Python基本语句;3.Python函数;4.Python模块;5.Python异常处理;6.Python面向对象等相关知识。另外:我使用的是Python2.5这个版本,如果你使用的Python3.0,可能不兼容。推荐使用稳定的2.5版,linux系统默认安装的也是2.5这个版本,许多第三方库也是使用2.5这个版本。下面是这个小东西的一个截图:下面是服务器端代码:Python代码1.#_*_coding:utf-8_*_2.#Filename:ServerUI.py3.#Python在线聊天服务器端4.5.importTkinter6.importtkFont7.importsocket8.importthread9.importtime10.importsys11.12.classServerUI():13.14.title='Python在线聊天-服务器端V1.0'15.local='127.0.0.1'16.port=880817.globalserverSock;18.flag=False19.20.#初始化类的相关属性,类似于Java的构造方法21.def__init__(self):22.self.root=Tkinter.Tk()23.self.root.title(self.title)24.25.#窗口面板,用4个frame面板布局26.self.frame=[Tkinter.Frame(),Tkinter.Frame(),Tkinter.Frame(),Tkinter.Frame()]27.28.#显示消息Text右边的滚动条29.self.chatTextScrollBar=Tkinter.Scrollbar(self.frame[0])30.self.chatTextScrollBar.pack(side=Tkinter.RIGHT,fill=Tkinter.Y)31.32.#显示消息Text,并绑定上面的滚动条33.ft=tkFont.Font(family='Fixdsys',size=11)34.self.chatText=Tkinter.Listbox(self.frame[0],width=70,height=18,font=ft)35.self.chatText['yscrollcommand']=self.chatTextScrollBar.set36.self.chatText.pack(expand=1,fill=Tkinter.BOTH)37.self.chatTextScrollBar['command']=self.chatText.yview()38.self.frame[0].pack(expand=1,fill=Tkinter.BOTH)39.40.#标签,分开消息显示Text和消息输入Text41.label=Tkinter.Label(self.frame[1],height=2)42.label.pack(fill=Tkinter.BOTH)43.self.frame[1].pack(expand=1,fill=Tkinter.BOTH)44.45.#输入消息Text的滚动条46.self.inputTextScrollBar=Tkinter.Scrollbar(self.frame[2])47.self.inputTextScrollBar.pack(side=Tkinter.RIGHT,fill=Tkinter.Y)48.49.#输入消息Text,并与滚动条绑定50.ft=tkFont.Font(family='Fixdsys',size=11)51.self.inputText=Tkinter.Text(self.frame[2],width=70,height=8,font=ft)52.self.inputText['yscrollcommand']=self.inputTextScrollBar.set53.self.inputText.pack(expand=1,fill=Tkinter.BOTH)54.self.inputTextScrollBar['command']=self.chatText.yview()55.self.frame[2].pack(expand=1,fill=Tkinter.BOTH)56.57.#发送消息按钮58.self.sendButton=Tkinter.Button(self.frame[3],text='发送',width=10,command=self.sendMessage)59.self.sendButton.pack(expand=1,side=Tkinter.BOTTOMandTkinter.RIGHT,padx=25,pady=5)60.61.#关闭按钮62.self.closeButton=Tkinter.Button(self.frame[3],text='关闭',width=10,command=self.close)63.self.closeButton.pack(expand=1,side=Tkinter.RIGHT,padx=25,pady=5)64.self.frame[3].pack(expand=1,fill=Tkinter.BOTH)65.66.#接收消息67.defreceiveMessage(self):68.#建立Socket连接69.self.serverSock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)70.self.serverSock.bind((self.local,self.port))71.self.serverSock.listen(15)72.self.buffer=102473.self.chatText.insert(Tkinter.END,'服务器已经就绪......')74.#循环接受客户端的连接请求75.whileTrue:76.self.connection,self.address=self.serverSock.accept()77.self.flag=True78.whileTrue:79.#接收客户端发送的消息80.self.cientMsg=self.connection.recv(self.buffer)81.ifnotself.cientMsg:82.continue83.elifself.cientMsg=='Y':84.self.chatText.insert(Tkinter.END,'服务器端已经与客户端建立连接......')85.self.connection.send('Y')86.elifself.cientMsg=='N':87.self.chatText.insert(Tkinter.END,'服务器端与客户端建立连接失败......')88.self.connection.send('N')89.else:90.theTime=time.strftime(%Y-%m-%d%H:%M:%S,time.localtime())91.self.chatText.insert(Tkinter.END,'客户端'+theTime+'说:')92.self.chatText.insert(Tkinter.END,''+self.cientMsg)93.94.#发送消息95.defsendMessage(self):96.#得到用户在Text中输入的消息97.message=self.inputText.get('1.0',Tkinter.END)98.#格式化当前的时间99.theTime=time.strftime(%Y-%m-%d%H:%M:%S,time.localtime())100.self.chatText.insert(Tkinter.END,'服务器'+theTime+'说:')101.self.chatText.insert(Tkinter.END,''+message+'')102.ifself.flag==True:103.#将消息发送到客户端104.self.connection.send(message)105.else:106.#Socket连接没有建立,提示用户107.self.chatText.insert(Tkinter.END,'您还未与客户端建立连接,客户端无法收到您的消息')108.#清空用户在Text中输入的消息109.self.inputText.delete(0.0,message.__len__()-1.0)110.111.#关闭消息窗口并退出112.defclose(self):113.sys.exit()114.115.#启动线程接收客户端的消息116.defstartNewThread(self):117.#启动一个新线程来接收客户端的消息118.#thread.start_new_thread(function,args[,kwargs])函数原型,119.#其中function参数是将要调用的线程函数,args是传递给线程函数的参数,它必须是个元组类型,而kwargs是可选的参数120.#receiveMessage函数不需要参数,就传一个空元组121.thread.start_new_thread(self.receiveMessage,())122.123.defmain():124.server=ServerUI()125.server.startNewThread()126.server.root.mainloop()127.128.if__name__=='__main__':129.main()#_*_coding:utf-8_*_#Filename:ServerUI.py#Python在线聊天服务器端importTkinterimporttkFontimportsocketimportthreadimporttimeimportsysclassServerUI():title=Python在线聊天-服务器端V1.0local='127.0.0.1'port=8808globalserverSock;flag=False#初始化类的相关属性,类似于Java的构造方法def__init__(self):self.root=Tkinter.Tk()self.root.title(self.title)#窗口面板,用4个frame面板布局self.frame=[Tkinter.Frame(),Tkinter.Frame(),Tkinter.Frame(),Tkinter.Frame()]#显示消息Text右边的滚动条self.chatTextScrollBar=Tkinter.Scrollbar(self.frame[0])self.chatTextScrollBar.pack(side=Tkinter.RIGHT,fill=Tkinter.Y)#显示消息Text,并绑定上面的滚动条ft=tkFont.Font(family='Fixdsys',size=11)self.chatText=Tkinter.Listbox(self.frame[0],width=70,height=18,font=ft)self.chatText['yscrollcommand']=self.chatTextScrollBar.setself.chatText.pack(
本文标题:python聊天
链接地址:https://www.777doc.com/doc-4211252 .html