Python使用UDP协议与多线程实现简单聊天室
前言成果源码
前言下午看了B站讲socket的课,就想利用UDP协议实现聊天室的功能,然后自己看了一下多线程文章,就实现了简单聊天室的功能,其实还有许多优化的地方,比如加一些异常捕获的功能,本人小白一枚,就这样把
成果为了方便测试,我们用pycharm与本机shell环境来模拟两台电脑发送消息,pycharm端监听是8801端口,本地shell监听8080端口
shell端发送
PYcharm接收到消息
Pycharm回复
shell端收到消息
注意 udp_socket.bind(("", 8801)),这里的端口作为接收线程监听的端口,所以要写对端的端口
代码如下:
from socket import *
import threading
## 发送方法,需要传3个形参
def send_msg(udp_socket,dest_addr,dest_port):
send_data = input('请输入要发送的内容:')
udp_socket.sendto(send_data.encode("utf-8"), (dest_addr,dest_port))
## 接收方法,需要传1个形参
def receive_msg(udp_socket):
recv_data = udp_socket.recvfrom(1024)
recv_msg = recv_data[0]
send_addr = recv_data[1]
print("信息来自:%s 内容是:%s" % (str(send_addr), recv_msg.decode("utf-8")))
def main():
udp_socket = socket(AF_INET, SOCK_DGRAM)
#
udp_socket.bind(("", 8801)) ## 接收线程监听8801端口
t_recv = threading.Thread(target=receive_msg, args=(udp_socket,))
t_recv.setDaemon(True) ##接收线程设置为守护线程
t_recv.start()
#这里做了一个判断
while True:
option = input("请输入功能:1.发送t2.退出n")
if option == '1':
dest_addr = input("请输入要发送的IP地址:")
dest_port = int(input("请输入目标端口:"))
send_msg(udp_socket, dest_addr, dest_port)
elif option == '2':
break
udp_socket.close()
if __name__ == '__main__':
main()



