网络编程之UDP套接字编程

UDP套接字服务端

  • 创建UDP数据报套接字
import socket

# 功能:
#      创建一个套接字
# 参数:
#      socket_family : 选择地址族类型  AF_INET(IPv4) / AF_INET6(IPv6)
#      socket_type :  套接字类型 SOCK_STREAM(流式) /SOCK_DGRAM(数据报)
#      proto : 选择子协议类型  通常为0
# 返回值: 
#       返回套接字对象
sockfd = socket.socket(AF_INET,SOCK_DGRAM)
  • 绑定服务端地址(本机的IP和端口号)
# 功能:绑定IP地址
# 参数:一个包含两个元素的元组,元组第一个元素是主机名,第二个是使用的端口号
sockfd.bind(addr)
  • 消息的收发
# 功能:接收UDP消息
# 参数:每次最多接收多大的消息
# 返回值:
#      data  接收到的数据
#      addr  消息发送端的地址
# 一次接收一个数据报,如果数据报大小大于buffersize则会丢失部分消息
data,addr = sockfd.recvfrom(buffersize)

# 功能:发送udp消息
# 参数:
#      data  发送的消息  bytes格式
#      addr  目标地址
# 返回值:发送的字节数
sockfd.sendto(data,addr)
  • 关闭套接字
sockfd.close()

UDP套接字客户端

  • 创建套接字
import socket
sockfd = socket.socket(AF_INET,SOCK_DGRAM)
  • 消息收发
sockfd.sendto(data,addr)
data,addr = sockfd.recvfrom(buffersize)
  • 关闭套接字
sockfd.close()

补充函数

# 功能:发送tcp消息
# 参数:要发送的内容,bytes格式
# 返回值:成功返回 None 失败产生异常
sendall(data)

UDP应用之广播

  • 广播:一点发送,多点接收
  • 广播地址:一个网段内有一个指定的广播地址,是该网段的最大地址
  • 广播风暴:一个网络中有大量的广播就会产生广播风暴占用大量带宽,影响正常的访问速度

TCP套接字编程和UDP套接字编程区别

  • 流式套接字使用字节流的方式传输,数据报套接字以数据报形式传输数据
  • tcp会有粘包现象,udp有消息边界不会形成粘包
  • tcp 可以保障数据传输完整性,udp则不保证
  • tcp 需要进行listen,accept操作,udp不需要
  • tcp收发消息使用新的套接字,recv,send,而udp使用recvfrom,sendto

sys.argv 属性

  • 功能:获取命令行参数,得到一个列表
  • 命令本身是 argv[0]
  • 后面的参数从argv[1]开始,默认以空格分隔
  • 使用引号引起来的内容算作一个整体
  • 命令行参数都以字符串放入列表
#  test.py
import sys
print(sys.argv)

# python3 test.py
# ['test.py']

# python3 test.py hello
# ['test.py','hello']

# python3 test.py hello world
# ['test.py','hello','world']

# python3 test.py 'hello world'
# ['test.py','hello world']

你可能感兴趣的:(网络编程之UDP套接字编程)