本文从WordPress迁移而来, 查看全部WordPress迁移文章
一直没空,今天翻出来,总结一下,虽然都是比较基础的东西,但还是记录一下吧….
一:程序的功能
1.服务器与客户端通信,客户端与客户端通信
2.服务器和客户端都可以显示在线的客户,客户上线,下线,可以实时刷新
3.基于第2点,在通信的时候,无论是服务器还是客户端,都可以选择和一人或多人通信
二:开发环境
1.环境:win7,python2.7,PyQt4
2.使用python的socket模块,threading模块
3.PyQt4开发图形界面(用designer布置控件,不是手写)
三:设计思路
服务器
- 主线程负责图形界面等
- 创建一个线程负责监听客户的连接请求
- 没当有客户端成功连接,就又创建一个线程,专门负责和该用户通信
客户端
- 主线程负责图形界面等
- 创建一个线程负责连接服务器,当连接失败或中断后,可以自动重复连接
四:使用的QT控件
QWidget
QGroupBox
QTextBrowser
QTextEdit
QListWidget
QPushButton
五:发送,接收信息自定义的协议
- 服务器发送信息:
- 服务器发给客户端:FS>信息内容
- 服务器接收A客户端信息,发给B客户端:FA客户端地址>信息内容
- 服务器接收信息:
- 客户端发给服务器的信息:TS>信息内容
- A客户端发给B客户端的信息(经服务器中转):TB客服端地址>信息内容
- 客户端发送信息:
- 发送给服务器: TS>信息内容
- 发送给客户端: T对方地址>信息内容
- 客户端接收信息:(其实都是服务器发过来的,一种是服务器直接发送,一种是服务器转发其他客户端的信息)
- 接收来自服务器的信息:FS>信息内容
- 接收客户端的信息:F对方地址>信息内容
六:问题
- 处理异常的方面做得不好
- 多线程方面考虑的东西太少
- find那个功能没有做,懒得做了。。。。以后把这个程序写得更丰富的时候再做了
- 服务器程序MyServer.py
1 | # -*- coding:utf-8 -*- |
- 客户端程序MyClient.py
1 | # -*- coding:utf-8 -*- |
由designer布置控件后,用PyQt4的命令自动生成的代码(其实使用的是同一个界面,只是做了稍微的修改….)
- 服务器界面serverUI.py
1 | # -*- coding: utf-8 -*- |
- 客户端界面clientUI.py
1 | # -*- coding: utf-8 -*- |
运行截图
- server
- client1
- client2