15软件工程二班 郭浩 1505060218
作业体验:
决定做这个的时候还是蛮开心的想着可以自己实现一个聊天小程序,到最后做出来虽然看起来很丑功能也不齐全但还是有成就感。
服务器
我是从最开始的socket服务器客户端通信拓展来的,服务器客户端一对一通信实现过没什么大问题,但是要实现多人聊天首先肯定是要创建多个套接字,服务器一直处在一个创建套接字的过程中只要有新的就能马上创建一个新的连接,然后就是每一个客户端具体的功能实现了,我用了一个类,在类中包含了所需要的函数每次去调用函数会比较方便,函数里面就是他们的具体功能实现了:
首先要实现这个聊天室功能必不可少的就是广播功能了,这个也不难,我弄了一个队列将对列中某个客户的消息通过服务器转发给除自己之外的所有客户端。
我还决定做一个登陆和注册功能,本来这个还要用到数据库为了偷懒我创建了一个类然后导入了json包代替实现了数据库的功能(感觉这样也绰绰有余了只要用json的形式存下账号和密码就够了)
一开始处理“命令”进入哪个功能界面的函数也是不可少的(称他为程序入口函数吧)
发送和接受数据中数据可能还要经过编码处理所以我也分别创建了一个recv函数用来处理接收和send函数用来处理发送。
客户退出也是需要一个函数处理
客户端
客户端相对来说比较简单(其实开始也想不通多线程):我在网上找了多线程的一些资料知道了个大概。因为我是用python,python的线程库我选择使用threading,创建2个函数recv和send,把他们分别弄到一个线程中,将这个两个子线程append到一个空队列中,在再主函数中循环他们。他们一直要保持执行状态嘛,于是我在他们的函数中让他们无限循环,然后利用join(只要子线程没执行完主线程便不会停止)就可以实现客户端完整功能。
不足之处
我以前GUI都是用tkinter,这次想用pyqt5来实现虽然单独的聊天界面我是做了出来(控件不多很快能入手并且是自适应布局),最后我想要将我的客户端消息显示到GUI上面发现在多线程中 无法创建GUI类对象,最后没能解决。
网友评论