【背景】
公司内部想要有一个可用于局域网网的聊天软件,方便部门同事们业务沟通。
今天主要讲服务端的源码,客户端源码明天再继续写。
【效果】
【思路】
由于我给公司内部的电脑都配置了Python环境,所以就想简单些用python些SocketIO实现一个。
【资料图】
服务端直接python些,在服务器上跑,不需要GUI界面。
客户端GUI就用tkinter,也不用打包,直接终端上run py文件得了。
大致设计就是客户端全连server,server收到任何客户端的message都广播到所有连接着的客户端,在客户端界面上显示出来的效果就是一个聊天室了。
【需要的Package】
主要需要安装的package包括:
需要TCP连接通信所以安装socket
需要多线程所以安装threading
【服务端重点代码】
由于是局域网部署,所以HOST名称就是’’代表本机,PORT选一个不被占用的,我选9090。
如果要部署到外网,就进行相应公网方面的设置即可。
需要创一个Server实例,Clients和nicknames数组用来同步存放接入的客户端和昵称,实现一一对应的管理,后续逻辑中要加一起加,要删一起删。
主线程函数是receive函数,用一个while true循环持续执行,持续监听客户端的连接,通过与Client交互获得昵称后将Client和昵称分别加入Client列表和昵称列表。广播一次”某Client已接入房间“的信息。最后启动该Client的Handle线程继续由该线程处理该Client的相应交互行为。
需要创一个Handle函数,用来处理Client相关操作,包括Client接收信息,广播信息,连接中断时关闭并从列表中移除Client以及相应的nickname。handle函数会被主进程函数receive调用。
需要创一个Broadcast函数用来广播客户端消息,会被Handle调用:
主线程具体源码:
最后,启动主线程:print(“Server running…”)receive()
【完整源码-包括服务端和客户端-直接运行可用】
下载地址:/download/weixin_41697242/88314473