发布一个用Python实现的一个在线聊天,主要功能是实现客户端与服务器端的双向通信,这个小东西用到的主要知识点:
1.Python Socket;
2.Python Tkinter库。
当然也应该了解如下的基础知识:
1.Python基本语法;
2.Python基本语句;
3.Python函数;
4.Python模块;
5.Python异常处理;
6.Python面向对象;
7.Python线程等相关知识。
另外:我使用的是Python2.5这个版本,如果你使用的Python3.0,可能不兼容。 推荐使用稳定的2.5版,linux系统默认安装的也是2.5这个版本,许多第三方库也是使用2.5这个版本。
下面是这个小东西的一个截图:
下面是服务器端代码:
# _*_ coding:utf-8 _*_ # Filename:ServerUI.py # Python在线聊天服务器端 import Tkinter import tkFont import socket import thread import time import sys class ServerUI(): title = 'Python在线聊天-服务器端V1.0' local = '127.0.0.1' port = 8808 global serverSock; 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.set self.chatText.pack(expand=1,fill=Tkinter.BOTH) self.chatTextScrollBar['command'] = self.chatText.yview() self.frame[0].pack(expand=1,fill=Tkinter.BOTH) #标签,分开消息显示Text和消息输入Text label = Tkinter.Label(self.frame[1],height=2) label.pack(fill=Tkinter.BOTH) self.frame[1].pack(expand=1,fill=Tkinter.BOTH) #输入消息Text的滚动条 self.inputTextScrollBar = Tkinter.Scrollbar(self.frame[2]) self.inputTextScrollBar.pack(side=Tkinter.RIGHT,fill=Tkinter.Y) #输入消息Text,并与滚动条绑定 ft = tkFont.Font(family='Fixdsys',size=11) self.inputText = Tkinter.Text(self.frame[2],width=70,height=8,font=ft) self.inputText['yscrollcommand'] = self.inputTextScrollBar.set self.inputText.pack(expand=1,fill=Tkinter.BOTH) self.inputTextScrollBar['command'] = self.chatText.yview() self.frame[2].pack(expand=1,fill=Tkinter.BOTH) #发送消息按钮 self.sendButton=Tkinter.Button(self.frame[3],text=' 发 送 ',width=10,command=self.sendMessage) self.sendButton.pack(expand=1,side=Tkinter.BOTTOM and Tkinter.RIGHT,padx=25,pady=5) #关闭按钮 self.closeButton=Tkinter.Button(self.frame[3],text=' 关 闭 ',width=10,command=self.close) self.closeButton.pack(expand=1,side=Tkinter.RIGHT,padx=25,pady=5) self.frame[3].pack(expand=1,fill=Tkinter.BOTH) #接收消息 def receiveMessage(self): #建立Socket连接 self.serverSock=socket.socket(socket.AF_INET,socket.SOCK_STREAM) self.serverSock.bind((self.local,self.port)) self.serverSock.listen(15) self.buffer = 1024 self.chatText.insert(Tkinter.END,'服务器已经就绪......') #循环接受客户端的连接请求 while True: self.connection,self.address = self.serverSock.accept() self.flag = True while True: #接收客户端发送的消息 self.cientMsg = self.connection.recv(self.buffer) if not self.cientMsg: continue elif self.cientMsg == 'Y': self.chatText.insert(Tkinter.END,'服务器端已经与客户端建立连接......') self.connection.send('Y') elif self.cientMsg == 'N': self.chatText.insert(Tkinter.END,'服务器端与客户端建立连接失败......') self.connection.send('N') else: theTime = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) self.chatText.insert(Tkinter.END, '客户端 ' + theTime +' 说:\n') self.chatText.insert(Tkinter.END, ' ' + self.cientMsg) #发送消息 def sendMessage(self): #得到用户在Text中输入的消息 message = self.inputText.get('1.0',Tkinter.END) #格式化当前的时间 theTime = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) self.chatText.insert(Tkinter.END, '服务器 ' + theTime +' 说:\n') self.chatText.insert(Tkinter.END,' ' + message + '\n') if self.flag == True: #将消息发送到客户端 self.connection.send(message) else: #Socket连接没有建立,提示用户 self.chatText.insert(Tkinter.END,'您还未与客户端建立连接,客户端无法收到您的消息\n') #清空用户在Text中输入的消息 self.inputText.delete(0.0,message.__len__()-1.0) #关闭消息窗口并退出 def close(self): sys.exit() #启动线程接收客户端的消息 def startNewThread(self): #启动一个新线程来接收客户端的消息 #thread.start_new_thread(function,args[,kwargs])函数原型, #其中function参数是将要调用的线程函数,args是传递给线程函数的参数,它必须是个元组类型,而kwargs是可选的参数 #receiveMessage函数不需要参数,就传一个空元组 thread.start_new_thread(self.receiveMessage,()) def main(): server = ServerUI() server.startNewThread() server.root.mainloop() if __name__=='__main__': main()
下面是客户端代码:
# _*_ coding:utf-8 _*_ # Filename:ClientUI.py # Python在线聊天客户端 import Tkinter import tkFont import socket import thread import time import sys class ClientUI(): title = 'Python在线聊天-客户端V1.0' local = '127.0.0.1' port = 8808 global clientSock; flag = False #初始化类的相关属性,类似于Java的构造方法 def __init__(self): self.root = Tkinter.Tk() self.root.title(self.title) #窗口面板,用4个面板布局 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.set self.chatText.pack(expand=1,fill=Tkinter.BOTH) self.chatTextScrollBar['command'] = self.chatText.yview() self.frame[0].pack(expand=1,fill=Tkinter.BOTH) #标签,分开消息显示Text和消息输入Text label = Tkinter.Label(self.frame[1],height=2) label.pack(fill=Tkinter.BOTH) self.frame[1].pack(expand=1,fill=Tkinter.BOTH) #输入消息Text的滚动条 self.inputTextScrollBar = Tkinter.Scrollbar(self.frame[2]) self.inputTextScrollBar.pack(side=Tkinter.RIGHT,fill=Tkinter.Y) #输入消息Text,并与滚动条绑定 ft = tkFont.Font(family='Fixdsys',size=11) self.inputText = Tkinter.Text(self.frame[2],width=70,height=8,font=ft) self.inputText['yscrollcommand'] = self.inputTextScrollBar.set self.inputText.pack(expand=1,fill=Tkinter.BOTH) self.inputTextScrollBar['command'] = self.chatText.yview() self.frame[2].pack(expand=1,fill=Tkinter.BOTH) #发送消息按钮 self.sendButton=Tkinter.Button(self.frame[3],text=' 发 送 ',width=10,command=self.sendMessage) self.sendButton.pack(expand=1,side=Tkinter.BOTTOM and Tkinter.RIGHT,padx=15,pady=8) #关闭按钮 self.closeButton=Tkinter.Button(self.frame[3],text=' 关 闭 ',width=10,command=self.close) self.closeButton.pack(expand=1,side=Tkinter.RIGHT,padx=15,pady=8) self.frame[3].pack(expand=1,fill=Tkinter.BOTH) #接收消息 def receiveMessage(self): try: #建立Socket连接 self.clientSock=socket.socket(socket.AF_INET,socket.SOCK_STREAM) self.clientSock.connect((self.local, self.port)) self.flag = True except: self.flag = False self.chatText.insert(Tkinter.END,'您还未与服务器端建立连接,请检查服务器端是否已经启动') return self.buffer = 1024 self.clientSock.send('Y') while True: try: if self.flag == True: #连接建立,接收服务器端消息 self.serverMsg = self.clientSock.recv(self.buffer) if self.serverMsg == 'Y': self.chatText.insert(Tkinter.END,'客户端已经与服务器端建立连接......') elif self.serverMsg == 'N': self.chatText.insert(Tkinter.END,'客户端与服务器端建立连接失败......') elif not self.serverMsg: continue else: theTime = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) self.chatText.insert(Tkinter.END, '服务器端 ' + theTime +' 说:\n') self.chatText.insert(Tkinter.END, ' ' + self.serverMsg) else: break except EOFError, msg: raise msg self.clientSock.close() break #发送消息 def sendMessage(self): #得到用户在Text中输入的消息 message = self.inputText.get('1.0',Tkinter.END) #格式化当前的时间 theTime = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) self.chatText.insert(Tkinter.END, '客户端器 ' + theTime +' 说:\n') self.chatText.insert(Tkinter.END,' ' + message + '\n') if self.flag == True: #将消息发送到服务器端 self.clientSock.send(message); else: #Socket连接没有建立,提示用户 self.chatText.insert(Tkinter.END,'您还未与服务器端建立连接,服务器端无法收到您的消息\n') #清空用户在Text中输入的消息 self.inputText.delete(0.0,message.__len__()-1.0) #关闭消息窗口并退出 def close(self): sys.exit() #启动线程接收服务器端的消息 def startNewThread(self): #启动一个新线程来接收服务器端的消息 #thread.start_new_thread(function,args[,kwargs])函数原型, #其中function参数是将要调用的线程函数,args是传递给线程函数的参数,它必须是个元组类型,而kwargs是可选的参数 #receiveMessage函数不需要参数,就传一个空元组 thread.start_new_thread(self.receiveMessage,()) def main(): client = ClientUI() client.startNewThread() client.root.mainloop() if __name__=='__main__': main()
上面的代码基本上都是有注释的,是容易阅读的,这个程序比较简陋,但记住动手写才是非常重要的。
另外直接拷贝上面的代码,有可能需要你排版一下格式,因为Python语言都是用缩进来区分语句块的。
Python这种语言简单并且功能强大,第三方支持的类库也很丰富,开发起来效率确实很高,据说使用Python web框架Django能用一星期开发出一个网站,感觉真是比较神奇呀。
一个Java技术交流群,一起交流,共同进步,扣扣群号:513086638
相关推荐
在Python编程领域,创建一个在线聊天程序是一项常见的实践任务,它涉及到网络编程和并发处理等核心概念。本项目采用TCP(传输控制协议)作为通信基础,实现客户端与服务器端的双向交互,允许用户通过网络进行实时的...
【标题】"Python在线聊天室"是一个基于Python编程语言实现的简单网络聊天应用程序。它允许用户通过客户端连接到服务器端,进行实时的信息交流。这样的项目通常用于教学目的,帮助初学者理解网络通信、多线程以及...
Python聊天机器人,智能问答系统 Python聊天机器人,智能问答系统 Python聊天机器人,智能问答系统 Python聊天机器人,智能问答系统 Python聊天机器人,智能问答系统 Python聊天机器人,智能问答系统 Python...
【Python 多人在线聊天室】是一个基于 IRC(Internet Relay Chat)协议的项目,旨在创建一个允许用户通过Python实现的在线交流平台。IRC 是一种早期的实时通讯协议,专为多用户聊天室设计,至今仍被许多技术社区广泛...
Python 微信聊天机器人 Python源码Python 微信聊天机器人 Python源码Python 微信聊天机器人 Python源码Python 微信聊天机器人 Python源码Python 微信聊天机器人 Python源码Python 微信聊天机器人 Python源码Python ...
【Python聊天室项目详解】 Python作为一种功能强大的编程语言,因其简洁明了的语法和丰富的库支持,被广泛用于各种项目开发,包括网络编程。在这个基于Python的聊天室项目中,我们将探讨如何使用Python的socket模块...
根据提供的文件内容,本文将详细介绍如何使用Python编写一个简易的局域网内聊天室程序。局域网聊天室是指在同一局域网(Local Area Network, LAN)内的用户可以相互发送和接收消息的平台。在本实例中,主要使用了UDP...
【Python Web聊天系统的实现】 在IT行业中,Python以其简洁易读的语法和强大的库支持而备受青睐,尤其在Web开发领域。本项目“Python-这是一个简单的Web聊天系统可以插入到任何地方”就是一个很好的实例,展示了...
【Python简易聊天软件】是一个基于Python编程语言实现的初级聊天应用程序。这个项目旨在提供一个基础的聊天室功能,用户可以通过它进行简单的文本交流。虽然由于其对开发环境的高度依赖,导致该软件在非特定环境下...
* Client端程序启动了一个聊天窗口,支持多人的在线连接(最多5人)。 * recvMsg函数完成接收消息的行为,并且实时的将接收到的消息刷新到屏幕上,同时对多个异常(OSError, ConnectionAbortedError, Connection...
在Python聊天程序中,`Tkinter`库用于构建用户界面。它是Python的标准GUI库,可以方便地创建窗口、按钮、文本框等控件。在这个例子中,`Tkinter.Frame`被用来组织窗口的布局,`Tkinter.Listbox`用于显示聊天消息,`...
【Python编程实现在线聊天室】 Python作为一种高级编程语言,因其简洁明了的语法和丰富的库支持,成为初学者和专业人士的首选。在这个“Python编写的在线聊天室”项目中,我们将探讨如何使用Python来创建一个实时...
基于socket的python聊天,客户端client.py,功能有聊天室群聊、一对一悄悄话私聊等。tcp协议,图形化界面GUI,使用tkinter制作,简单明了
本项目是关于如何使用Python设计一个简单的自动聊天机器人,它具备基本的人机交互功能,并且具有自我学习的能力,以适应不同的日常对话场景。 首先,设计这样的聊天机器人通常会采用自然语言处理(NLP)技术。...
本项目“python聊天室---pyqt5+socket+Thread聊天室”旨在教授如何利用Python的PyQt5库创建一个聊天室应用,并通过Socket进行网络通信,同时采用多线程(Thread)来实现后台任务的异步执行。以下将详细解析这个项目的...
【Python-即时通讯Python实现web版多人聊天室】 在当今数字化时代,即时通讯(Instant Messaging,简称IM)已经成为人们日常沟通的重要工具。本教程将深入探讨如何使用Python语言来实现一个基于Web的多人聊天室。...
Python AIML聊天机器人广泛应用于客户服务、在线教育、娱乐和智能助手等领域。它们可以模拟人类对话,提供实时的答疑解惑,提高效率,降低人力成本。同时,随着深度学习和自然语言处理技术的进步,Python AIML聊天...
尽管现在Flash已经逐渐被淘汰,但这个Python聊天服务器仍然可以作为一个学习Socket编程和网络通信的好例子。 接下来,我们看看标签:“python”、“多人聊天”、“服务器”、“socket”。这些标签进一步明确了项目...
利用Python语言开发的网络聊天室不仅具备面向对象、与平台无关、安全性以及多线程操作等特点,而且Python作为一种高级编程语言,以其简洁的语法和强大的库支持,对于快速开发网络应用来说是非常合适的。在这样的背景...
ChatInterface.py 聊天程序主界面代码 (其中Client.py里包含Communite.py、Login.py、Register.py和ChatInterface.py 这四个子程序) 用户名密码:user.txt包含用户注册的用户名和经过MD5算法加密后的密码 ,用户...