ZBLOG

server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # create udp socket 之所以是udp socket 是因为SOCK_DGRAM

您的理解完全正确!让我详细解释一下这段代码和UDP socket的特点:

UDP Socket创建详解

代码分析

import socket

# 创建UDP socket
server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

参数说明

  • socket.AF_INET:使用IPv4地址族
  • socket.SOCK_DGRAM:数据报套接字(Datagram),即UDP协议

UDP vs TCP Socket对比

特性 UDP (SOCK_DGRAM) TCP (SOCK_STREAM)
连接方式 无连接 面向连接
可靠性 不可靠传输 可靠传输
数据边界 保留消息边界 字节流,无边界
速度 更快,开销小 较慢,开销大
使用场景 DNS、视频流、游戏 HTTP、FTP、邮件

完整UDP服务器示例

import socket

def udp_server():
    # 创建UDP socket
    server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    
    # 绑定地址和端口
    server_address = ('localhost', 8888)
    server_socket.bind(server_address)
    
    print(f"UDP服务器监听在 {server_address}")
    
    try:
        while True:
            # 接收数据 (UDP不需要建立连接)
            data, client_address = server_socket.recvfrom(1024)
            print(f"收到来自 {client_address} 的消息: {data.decode()}")
            
            # 发送响应
            response = f"已收到你的消息: {data.decode()}"
            server_socket.sendto(response.encode(), client_address)
            
    except KeyboardInterrupt:
        print("\n服务器关闭")
    finally:
        server_socket.close()

if __name__ == "__main__":
    udp_server()

对应的UDP客户端示例

import socket

def udp_client():
    # 同样创建UDP socket
    client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    
    server_address = ('localhost', 8888)
    
    try:
        while True:
            message = input("请输入要发送的消息 (输入quit退出): ")
            if message.lower() == 'quit':
                break
            
            # 发送数据到服务器
            client_socket.sendto(message.encode(), server_address)
            
            # 接收响应
            data, _ = client_socket.recvfrom(1024)
            print(f"服务器响应: {data.decode()}")
            
    finally:
        client_socket.close()

if __name__ == "__main__":
    udp_client()

关键特点总结

  1. 无连接通信:每次发送都需要指定目标地址
  2. sendto()/recvfrom():主要的收发方法
  3. 不保证顺序:数据包可能乱序到达
  4. 可能丢失:不保证数据一定送达
  5. 适合场景:实时应用、广播、简单查询

您的理解完全正确 - SOCK_DGRAM就是创建UDP套接字的关键参数!


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:http://sdn.0voice.com/?id=8522

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?