美文网首页
网络编程之UDP编程

网络编程之UDP编程

作者: 大千世界1998 | 来源:发表于2018-10-10 21:37 被阅读0次

    UDP编程

        UDP:User Datagram Protocal 用户数据报协议,是 OSI/RM 模型中隶属于传输层的面向无连接的网络数据传输协议。UDP 协议本身没有连接可靠性的保证,没有数据顺序 ACK 记录,没有数据重发等机制,因为没有那么多的数据传输控制特性,所以 UDP 进行数据传输过程中延迟较小,数据传输效率较高,比较适合对可靠性要求不是很高的程序!

        由于 UDP 面向无连接的特性,在编程处理的过程中,服务端和客户端的操作模式类似,唯一的区别就是服务端需要主动等待客户端发送消息,要将自己的 AF 暴露给客户端操作。

    服务端开发

    UDP服务端的编程操作步骤如下:

    引入依赖的模块
    定义服务器描述信息
    创建 UDP 套接字对象并绑定主机
    消息循环:和连接进入的客户端之间发送/收取消息
    关闭连接,释放资源

    操作伪代码描述如下:

    # 引入必须模块
    import socket
    
    # 定义服务器信息
    HOST = "" 
    PORT = 25556
    ADDRESS = (HOST, PORT)
    BUFFER = 1024
    
     # 创建 UDP 套接字对象
    udp_socket = socket.socket(…)
    
     # 绑定主机
    udp_socket.bind(ADDRESS)
    while True:
        # 接受消息,同时获取客户端地址
        msg, addr= udp_socket.recvfrom(..) 
    
        # 向指定的客户端发送 msg 消息
        udp_socket.sendto(msg, addr) 
    

    实际项目代码开发:

    # 引入依赖的模块
    import socket
    
    # 定义服务器信息
    HOST = ""
    PORT = 8080
    ADDRESS = (HOST, PORT)
    BUFFER = 1024
    
    # 创建UDP套接字
    udp_server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    
    # 绑定主机
    udp_server.bind(ADDRESS)
    
    # 信息交互
    while True:
        # 接收消息
        msg, addr = udp_server.recvfrom(BUFFER)
        print("client:", addr, msg.decode("utf-8"))
    
        # 发送消息
        info = input("enter message:")
        udp_server.sendto(info.encode("utf-8"), addr)
    
    # 服务器退出,先关闭套接字[服务器一般不退出]
    # udp_server.close()
    
    客户端开发

    客户端的开发更加简单,只需要明确目标主机信息就可以完成和目标主机之间的消息发送/接收。

    定义伪代码如下:

    udp_socket = socket.socket(..) # 创建 UDP 套接字对象
    while True: # 消息循环
        udp_socket.sendto(data, addr) / recvfrom() 发送接收消息
    udp_socket.close() # 关闭套接字
    

    实际项目代码开发:

    # 引入依赖的模块
    import socket
    
    # 定义服务器信息
    HOST = "IP地址"
    PORT = 8080
    ADDRESS = (HOST, PORT)
    BUFFER = 1024
    
    # 创建UDP套接字
    udp_client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    
    # 信息交互
    while True:
        # 发送消息
        info = input("enter massage:")
        udp_client.sendto(info.encode("utf-8"), ADDRESS)
    
        if info == "bye":
            udp_client.close()
            break
    
        # 接收消息
        msg, addr = udp_client.recvfrom(BUFFER)
        print(addr, "say:", msg.decode("utf-8"))
    

    相关文章

      网友评论

          本文标题:网络编程之UDP编程

          本文链接:https://www.haomeiwen.com/subject/apwmaftx.html