# _*_ coding:utf-8 _*_
# Filename:ClientUI.py
# Python在线聊天客户端 2016-2-12
import tkinter
import tkinter.font as tkFont
import socket
import threading
import time
import sys
class ClientUI():
title = 'Python在线聊天-客户端V1.0'
local = '127.0.0.1'
port = 5505
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'.encode())
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:
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 as 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.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):
#启动一个新线程来接收服务器端的消息
#thread.start_new_thread(function,args[,kwargs])函数原型,
#其中function参数是将要调用的线程函数,args是传递给线程函数的参数,它必须是个元组类型,而kwargs是可选的参数
#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()
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
Python做的TCP聊天查询,用的GUI窗体实现,有4个文件:客户端+服务端,使用类和未实用类。实验原理 Socket:网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。建立网络通信连接至少要一对端口号(socket)。socket本质是编程接口(API),对TCP/IP的封装,TCP/IP也要提供可供程序员做网络开发所用的接口,这就是Socket编程接口;HTTP是轿车,提供了封装或者显示数据的具体形式;Socket是发动机,提供了网络通信的能力。 本服务用于开启聊天室的服务功能,实现验证客户,监听用户事件,监控用户聊天行为和转发聊天消息。其中: tell 主要实现聊天信息的转发功能,通过查询用户列表筛选出列表之外的用户,并同时将聊天的用户名,时间,以及聊天的内容转发出去 serverFunc 实现了接收用户的昵称,监控并通知用户行为的功能 main 完成了初始的验证和建立连接的过程 特点:利用了socket中的 SOCK_STREAM 实现TCP连接 使用了多线程的方法,避免程序阻塞
资源详情
资源评论
资源推荐
收起资源包目录
Python做的TCP聊天程序.zip (4个子文件)
ServerUI - V2(未使用类).py 4KB
ServerUI.py 6KB
ClientUI - V2(未使用类).py 5KB
ClientUI.py 6KB
共 4 条
- 1
哒啵Q_git
- 粉丝: 24
- 资源: 9
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 论文(最终)_20240430235101.pdf
- 基于python编写的Keras深度学习框架开发,利用卷积神经网络CNN,快速识别图片并进行分类
- 最全空间计量实证方法(空间杜宾模型和检验以及结果解释文档).txt
- 5uonly.apk
- 蓝桥杯Python组的历年真题
- 2023-04-06-项目笔记 - 第一百十九阶段 - 4.4.2.117全局变量的作用域-117 -2024.04.30
- 2023-04-06-项目笔记 - 第一百十九阶段 - 4.4.2.117全局变量的作用域-117 -2024.04.30
- 前端开发技术实验报告:内含4四实验&实验报告
- Highlight Plus v20.0.1
- 林周瑜-论文.docx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论10