在线聊天服务端

import tkinter
import tkinter.font as tkFont
import socket
import threading
import time
import sys
class ServerUI():local='127.0.0.1'port=5505global serverSock;flag=Falsedef __init__(self):self.root=tkinter.Tk()self.root.title('在线聊天-服务端v1.0')self.frame=[tkinter.Frame(),tkinter.Frame(),tkinter.Frame(),tkinter.Frame()]self.chatTextScrollBar=tkinter.Scrollbar(self.frame[0])self.chatTextScrollBar.pack(side=tkinter.RIGHT,fill=tkinter.Y)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(expand=1,fill=tkinter.BOTH)self.chatTextScrollBar['command']=self.chatText.yview()self.frame[0].pack(expand=1,fill=tkinter.BOTH)label=tkinter.Label(self.frame[1],height=2)label.pack(fill=tkinter.BOTH)self.frame[1].pack(expand=1,fill=tkinter.BOTH)#输入消息text的滚动条self.inputTextScorllBar=tkinter.Scrollbar(self.frame[2])self.inputTextScorllBar.pack(side=tkinter.RIGHT,fill=tkinter.Y)#输入消息并与滚动条绑定ft=tkFont.Font(family='Fixdsys',size=11)self.inputText=tkinter.Text(self.frame[2],width=70,height=8,font=ft)self.inputText['yscrollcommand']=self.inputTextScorllBar.setself.inputText.pack(expand=1,fill=tkinter.BOTH)self.inputTextScorllBar['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=1024self.chatText.insert(tkinter.END ,'服务器已经就绪 ......')#循环接受客户端的连接请求while True:self.connection,self.address=self.serverSock.accept()self.flag=Truewhile True :#接收客户端发送的消息self.cientMsg=self.connection.recv(self.buffer).decode('utf-8')if not self.cientMsg:continueelif self.cientMsg=='Y':self.chatText.insert(tkinter.END ,'服务器端己经与客户端建立连接 .....')self.connection.send(b'Y')elif self.cientMsg=='N':self.chatText.insert(tkinter.END ,'服务器端与客户端建立连接失败 .....')self.connection.send(b'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.encode())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) :#启动一个新线程来接收客户端的消息#args是传递给线程函数的参数 receiveMessage 函数不需要参数,只传一个空元组thread=threading.Thread(target=self.receiveMessage,args=())thread.setDaemon(True);thread.start();def main():server=ServerUI()server.startNewThread()server.root.mainloop()if __name__ == '__main__':main()

在线聊天客户端

import tkinter
import tkinter.font as tkFont
import socket
import threading
import time,sys
class ClientUI():local='127.0.0.1'port=5505global clientSock;flag=False#初始化类的相关属性的构造函数def __init__(self):self.root=tkinter.Tk()self.root.title('在线聊天-客户端v1.0')#窗口面板,用四个面板布局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(expand=1,fill=tkinter.BOTH)self.chatTextScrollBar['command']=self.chatText.yview()self.frame[0].pack(expand=1,fill=tkinter.BOTH)#标签,分开消息显示Text和消息输入Textlabel=tkinter.Label(self.frame[1],height=2)label.pack(fill=tkinter.BOTH)self.frame[1].pack(expand=1,fill=tkinter.BOTH)#输入消息text的滚动条self.inputTextScorllBar=tkinter.Scrollbar(self.frame[2])self.inputTextScorllBar.pack(side=tkinter.RIGHT,fill=tkinter.Y)#输入消息并与滚动条绑定ft=tkFont.Font(family='Fixdsys',size=11)self.inputText=tkinter.Text(self.frame[2],width=70,height=8,font=ft)self.inputText['yscrollcommand']=self.inputTextScorllBar.setself.inputText.pack(expand=1,fill=tkinter.BOTH)self.inputTextScorllBar['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) :try:#建立 Socket 连接self.clientSock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)self.clientSock.connect((self.local,self.port))self.flag=Trueexcept:self.flag=Falseself.chatText.insert(tkinter.END,'您还未与客户端建立连接,请检查服务器是否启动......')returnself.buffer=1024self.clientSock.send('Y'.encode())#向服务器发送字符'Y',表示客户端要连接服务器while True:try:if self.flag==True:#连接建立,接受服务器端消息self.serverMsg=self.clientSock.recv(self.buffer).decode('utf-8')if self.serverMsg=='Y':self.chatText.insert(tkinter.END ,'客户端己经与服务端建立连接 .....')elif self.serverMsg=='N':self.chatText.insert(tkinter.END ,'客户端端与服务端建立连接失败 .....')elif not self.serverMsg:continueelse :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:breakexcept EOFError as msg:raise msgself.clientSock.close()breakdef 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.encode())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) :#启动一个新线程来接收客户端的消息#args是传递给线程函数的参数receiveMessage 函数不需要参数,只传一个空元组thread=threading.Thread(target=self.receiveMessage,args=())thread.setDaemon(True);thread.start();
def main() :client=ClientUI()client.startNewThread()client.root.mainloop()if __name__ == '__main__':main()

转载于:https://www.cnblogs.com/jzxs/p/11166180.html

基于TCP的在线聊天程序相关推荐

  1. 基于TCP协议网上聊天程序(python)带界面

    基于TCP协议网上聊天程序(python)带界面 1 设计目标 基于TCP协议网上聊天程序 实现一简单的聊天程序实现网上聊天,包括服务器和客户端. (1)支持多人聊天: (2)客户端具有图形化用户界面 ...

  2. 计算机网络课程设计--基于TCP协议网上聊天程序--python实现带图形界面--socket--多线程

                                              基于TCP协议网上聊天程序 引言 21世纪是一个以网络为核心的信息时代,要实现信息化,就必须依靠完善的网络.而随着计 ...

  3. Java案例:基于TCP的简单聊天程序

    文章目录 一.如何实现TCP通信 二.编写C/S架构聊天程序 (一)编写服务器端程序 - Server.java (二)编写客户端程序 - Client.java (三)测试服务器端与客户端能否通信 ...

  4. java tcp聊天程序_java实现基于Tcp的socket聊天程序

    对于步入编程行业不深的初学者或是已经有所领会的人来说,当学习一项新的技术的时候,非常渴望有一个附上注释完整的Demo.本人深有体会,网上的例子多到是很多,但是很杂不完整,写代码这种东西来不得半点马虎, ...

  5. 基于Linux的Socket编程之TCP全双工Server-Client聊天程序

    转载:http://blog.csdn.net/apollon_krj/article/details/53437764#0-tsina-1-58570-397232819ff9a47a7b7e80a ...

  6. 基于Python+Django框架的多人在线聊天程序

    基于Python的多人在线聊天程序 项目简介 本项目的选题为项目六:聊天程序,具体项目任务如下所示: 经过开发,本项目最终实现了项目任务 2. 的大体功能,实现了多用户之间的在线聊天室. 项目分析 本 ...

  7. 基于python的聊天软件的设计与实现_Python基于TCP实现会聊天的小机器人功能示例...

    本文实例讲述了Python基于TCP实现会聊天的小机器人功能.分享给大家供大家参考,具体如下: 一 代码 1.服务端程序 import socket words ={'how are you?':'F ...

  8. java在线聊天项目ppt_基于JavaEE的在线聊天聊天.ppt

    基于JavaEE的在线聊天聊天.ppt 聊城大学论文答辩,指导教师,学生姓名,年 月,基于JavaEE的在线聊天聊天 系统的设计与实现,论文提纲,,选题背景.研究内容,1,JavaEE技术介绍,主要创 ...

  9. 基于TCP的网络聊天室实现(C语言)

    基于TCP的网络聊天室实现(C语言) 一.网络聊天室的功能 二.网络聊天室的结果展示 三.实现思路及流程 四.代码及说明 1.LinkList.h 2.LinkList.c 3.client.c 4. ...

最新文章

  1. 传统的6d位姿估计fangfa1_基于改进的点对特征的6D位姿估计
  2. 我与监控宝之间的点点滴滴
  3. of type std::bad_cast: std::bad_cast
  4. pymysql 写入数据
  5. HDU-不容易系列之(3)—— LELE的RPG难题
  6. 图像色调,饱和度,对比度等相关定义
  7. vs2008试用期到期解决办法
  8. 容器编排技术 -- Kubernetes kubectl patch 命令详解
  9. python编程语言模块_Python基础编程常用模块汇总
  10. 下载HTMLTestRunner如何使用
  11. Magedu2_3 linux文件目录
  12. Shortest Prefixes
  13. rk3399 io工具的使用示例
  14. tomcat如何设置账号和密码
  15. 雪莹软件将word转图片产生空白区域的问题解决方法
  16. 安装vue环境,并新建Vue项目
  17. 使用scrapy框架做武林中文网的爬虫
  18. 组合电路、触发器、时序电路、寄存器
  19. 咖啡屋时光书城【原创】
  20. HBase进化之从NoSQL到NewSQL,凤凰涅槃成就Phoenix

热门文章

  1. asp.net链接mysql数据库------------【个人收集】
  2. centos 重启网卡_CentOS6 网络管理之网卡配置及简单路由设置
  3. mysql 二叉树表设计_mysql---B+tree索引的设计原理
  4. java 自定义报表_灵活数据分析 | 自定义数据分析_集力数据系统平台_Java报表系统软件...
  5. 全国计算机c二级编程题,全国计算机二级C上机 编程题.doc
  6. matlab 等分矩阵,用matlab根据列拆分矩阵.
  7. python循环for不从零开始_Python-多处理-巨大的for循环
  8. linux mysql误删,linux下MySQL安装与删除 (Ubuntu)
  9. 单路电压表c语言编程,用AT89C51单片机制作的数字电压表
  10. 算法—振兴中华(C语言版)