udp协议

Posted —super—

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了udp协议相关的知识,希望对你有一定的参考价值。

基于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

以上是关于udp协议的主要内容,如果未能解决你的问题,请参考以下文章

Python 之 Socket编程(TCP/UDP)

java 25 - 4 网络编程之 UDP协议传输的代码优化

Python UDP协议编程

Python UDP协议编程

用UDP实现可靠传输

UDP协议编程