基于UDP的套接字
udp是无链接的,先启动哪一端都不会报错
udp服务端
1 ss = socket() #创建一个服务器的套接字 2 ss.bind() #绑定服务器套接字 3 inf_loop: #服务器无限循环 4 cs = ss.recvfrom()/ss.sendto() # 对话(接收与发送) 5 ss.close() # 关闭服务器套接字
udp客户端
cs = socket() # 创建客户套接字
comm_loop: # 通讯循环
cs.sendto()/cs.recvfrom() # 对话(发送/接收)
cs.close() # 关闭客户套接字
qq聊天(由于udp无连接,所以可以同时多个客户端去跟服务端通信)
import socket ip_port=(\'127.0.0.1\',8081) udp_server_sock=socket.socket(socket.AF_INET,socket.SOCK_DGRAM) #买手机 udp_server_sock.bind(ip_port) while True: qq_msg,addr=udp_server_sock.recvfrom(1024) print(\'来自[%s:%s]的一条消息:\033[1;44m%s\033[0m\' %(addr[0],addr[1],qq_msg.decode(\'utf-8\'))) back_msg=input(\'回复消息: \').strip() udp_server_sock.sendto(back_msg.encode(\'utf-8\'),addr)
import socket BUFSIZE=1024 udp_client_socket=socket.socket(socket.AF_INET,socket.SOCK_DGRAM) qq_name_dic={ \'狗哥alex\':(\'127.0.0.1\',8081), \'瞎驴\':(\'127.0.0.1\',8081), \'一棵树\':(\'127.0.0.1\',8081), \'武大郎\':(\'127.0.0.1\',8081), } while True: qq_name=input(\'请选择聊天对象: \').strip() while True: msg=input(\'请输入消息,回车发送: \').strip() if msg == \'quit\':break if not msg or not qq_name or qq_name not in qq_name_dic:continue udp_client_socket.sendto(msg.encode(\'utf-8\'),qq_name_dic[qq_name]) back_msg,addr=udp_client_socket.recvfrom(BUFSIZE) print(\'来自[%s:%s]的一条消息:\033[1;44m%s\033[0m\' %(addr[0],addr[1],back_msg.decode(\'utf-8\'))) udp_client_socket.close()
基于udp的socket,在运行时永远不会发生粘包
udp最大接受长度512