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地址
# 参数:一个包含两个元素的元组,元组第一个元素是主机名,第二个是使用的端口号
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']
网友评论