Python使用UDP协议与多线程实现简单聊天室
前言
下午看了B站讲socket的课,就想利用UDP协议实现聊天室的功能,然后自己看了一下多线程文章,就实现了简单聊天室的功能,其实还有许多优化的地方,比如加一些异常捕获的功能,本人小白一枚,就这样把
成果
为了方便测试,我们用pycharm与本机shell环境来模拟两台电脑发送消息,pycharm端监听是8801端口,本地shell监听8080端口 shell端发送 PYcharm接收到消息 Pycharm回复 shell端收到消息
源码
注意 udp_socket.bind(("", 8801)),这里的端口作为接收线程监听的端口,所以要写对端的端口
代码如下:
from socket import *
import threading
def send_msg(udp_socket,dest_addr,dest_port):
send_data = input('请输入要发送的内容:')
udp_socket.sendto(send_data.encode("utf-8"), (dest_addr,dest_port))
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))
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()
|