Python中的udp网络传输基础代码

こ雲淡風輕ζ 提交于 2019-12-22 14:15:46

与tcp相对应的另一种网络传输:
客户端代码:

"""
udp_client.py udp客户端流程
"""
from socket import *

# 服务端地址
ADDR = ('127.0.0.1',8888)

# 创建udp套接字
sockfd = socket(AF_INET,SOCK_DGRAM)

# 循环发送消息
while True:
    data = input("Msg>>")
    if not data:                        # 遇到输入为空就结束循环
        break
    # 向服务器发送
    sockfd.sendto(data.encode(),ADDR)   # 没有connect,而是在sendto时,使用ADDR
    msg,addr = sockfd.recvfrom(1024)    # 接收消息,记得写上消息缓冲区大小
    print("From Server:",msg.decode())  # 打印时记得转换成字符串
sockfd.close()                          # 关闭套接字

服务端代码:

"""
udp_server.py  udp服务端流程
重点代码
"""

from socket import *

# 创建udp套接字
sockfd = socket(AF_INET,SOCK_DGRAM)

# 绑定地址
server_addr = ('0.0.0.0',8888)
sockfd.bind(server_addr)

# 收发消息
while True:
    data,addr = sockfd.recvfrom(1024)               # 直接接收到的就是data
    # if not data:
    #     break                                     # (接收为空时,退出)但是不合适,因为udp不止一个客户端
    print("From %s Msg:%s"%(addr,data.decode()))
    sockfd.sendto(b'Thanks',addr)                   # 发送时要添加目标地址

# 关闭套接字
sockfd.close()

总结 :tcp套接字和udp套接字编程区别

  1. 流式套接字是以字节流方式传输数据,数据报套接字以数据报形式传输
  2. tcp套接字会有粘包,udp套接字有消息边界不会粘包
  3. tcp套接字保证消息的完整性,udp套接字则不能
  4. tcp套接字依赖listen accept建立连接才能收发消息,udp套接字则不需要
  5. tcp套接字使用send,recv收发消息,udp套接字使用sendto,recvfrom

socket套接字属性
【1】 sockfd.type 套接字类型
【2】 sockfd.family 套接字地址类型
【3】 sockfd.getsockname() 获取套接字绑定地址
【4】 sockfd.fileno() 获取套接字的文件描述符
【5】 sockfd.getpeername() 获取连接套接字客户端地址
【6】 sockfd.setsockopt(level,option,value)
功能:设置套接字选项
参数: level 选项类别 SOL_SOCKET
option 具体选项内容
value 选项值

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!