python UDP多线程通信,以及自己加的花里胡哨、乱七八糟的东西
This_is_Y Lv6

来自之前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(),关闭套接字,客户端程序退出

服务器的话就比较简单了,在所有的客户端都退出后,再选择是否退出就行了

 

代码如下

服务器:

 

 

 客户端:

 

 效果如下:

 退出:

 

 Comments