来自之前cnblog的博客
源地址:https://www.cnblogs.com/This-is-Y/p/14526761.html
简单的通信代码,发送,接收,转发,接收,发送。用python短短几行就可以解决
服务器:
客户端:
过程非常简单,开启服务器,然后打开客户端,连接到服务器。客户端发送一段数据给服务器,服务器把数据转发回给客户端,还可以多开几个客户端。
效果就是这样子
但是肯定不行,客户端与客户端之间不能通信,然后就有了下面的代码,这是在网上找到的,我自己写的逻辑没这么清晰,所以就借用了一下这哥们的
博客地址:https://www.cnblogs.com/markjuruo/p/10101625.html
github:https://github.com/markjuruo/Python-UDP-Chating
客户端(版权消息也都留着,可以去看看他的,思路清晰)
服务器
效果挺不错,比上面要好,相当于是一个聊天室一样的结构,但是用着用着发现问题了,退出会卡死,所以就想着自己再改一改,优化一下退出的代码。
然后就是现在这版的代码,注释写得非常详细了。
首先,客户端是有两个线程,一个发送SEND,一个接收RECV。要关闭客户端的话,就要让两个线程都正常关闭,起初想用进程间的通信解决,queue队列,写着写着发现好像可以不用这么复杂。
关闭的主要流程是,用户输入一个特殊代码,告诉客户端准备退出,然后客户端发送一个请求退出的消息给服务器,然后结束掉SEND线程。
同时服务器接收到请求后,再单独发送一条消息给这个客户端,此时客户端的RECV线程中正在等待的recvfrom函数接收到这条消息。然后关闭RECV线程。
至此,两个线程都关闭,然后执行s.close(),关闭套接字,客户端程序退出
服务器的话就比较简单了,在所有的客户端都退出后,再选择是否退出就行了
代码如下
服务器:
客户端:
效果如下:
退出: