基于udp套接字的服务端
1. 创建数据报套接字
sockfd = socket(AF_INET,SOCK_DGRAM)
2. 绑定地址
sockfd.bind(addr)
3. 消息的收发
data,addr = sockfd.recvfrom(buffersize)
功能 : 接收UDP消息
参数 : 每次最多接收多大的消息
返回值:data 接收到的数据
addr 消息发送端的地址
* 一次接收一个数据报,如果数据报大小大于buffersize则会丢失部分消息
sockfd.sendto(data,addr)
功能 : 发送udp消息
参数 : data 发送的消息 bytes格式
addr 目标地址
返回值: 发送的字节数
4. 关闭套接字
sockfd.close()
udp客户端
1. 创建套接字
socket(AF_INET,SOCK_DGRAM)
2. 消息收发
recvfrom/sendto
3. 关闭套接字
close()
cookie
1. sys.argv 属性
功能 : 获取命令行参数,得到一个列表
命令本身是 argv[0]
后面的参数从argv[1]开始,默认以空格分隔
使用引号引起来的内容算作一个整体
命令行参数都以字符串放入列表
2.
在程序的第一行加
#!/usr/bin/env python3
添加程序的执行权限
chmod 755 file.py
修改后即可通过 ./file.py 运行程序
tcp套接字编程和udp套接字编程区别
1. 流式套接字使用字节流的方式传输,数据报套接字以数据报形式传输数据
2. tcp会有粘包现象,udp有消息边界不会形成粘包
3. tcp 可以保障数据传输完整性,udp则不保证
4. tcp 需要进行listen accept 操作,udp不需要
5. tcp收发消息使用新的套接字,recv send。udp使用recvfrom,sendto
补充函数
sendall(data)
功能 : 发送tcp消息
参数 : 要发送的内容,bytes格式
返回值 : 成功返回 None 失败产生异常
套接字对象
s代表一个套接字
s.family : 获取套接字地址族类型
s.type : 获取套接字类型
s.getsockname() : 获取套接字的绑定地址
s.fileno() : 获取套接字的文件描述符
文件描述符 : 每一个IO事件操作系统都会分配一个不同的正整数作为编号,改正整数即为这个IO的文件描述符。
* 文件描述符是操作系统识别IO的唯一标志
stdin ---> 0
stdout --> 1
stderr --> 2
s.getpeername() : 获取客户端连接套接字的对应地址
s.setsockopt(level,option,value)
功能:设置套接字选项,丰富或者修改套接字属性功能
参数: level 选项类别 SOL_SOCKET
option 具体选项
value 选项值
s.getsockopt(level,option)
功能:获取套接字选项值
参数: level 选项类别 SOL_SOCKET
option 具体选项
返回值:选项值
* 如果要设置套接字选项,最好在创建套接字之后立即设置
udp 应用之广播
广播 : 一点发送,多点接收
广播地址 : 一个网段内有一个指定的广播地址,是该网段的最大地址。 192.168.207.255
广播风暴 : 一个网络中有大量的广播就会产生广播风暴占用大量带宽,影响正常的访问速度。
想要看更多的课程请微信关注SkrEric的编程课堂