Python学习日志——UDP套接字使用
Posted SaltFishYe
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python学习日志——UDP套接字使用相关的知识,希望对你有一定的参考价值。
UDP的通信双方也分为客户端和服务器,但是在个人理解中这方面UDP并没有严格区分,发送请求的为客户端,响应请求的为服务端。
要在python中使用udp首先要先导入socket
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
上述例子中便创建了一个ipv4、udp套接字,
其中socket.AF_INET为ipv4型,socket.AF_INET6为ipv6型;
socket.SOCK_DGRAM为udp协议,socket.SOCK_STREAM为tcp协议
然后要绑定地址(127.0.0.1为本地ip地址)
host = ‘127.0.0.1‘ port = 7788 s.bind((host, port))
如此绑定了ip地址和端口号,若port端口号缺省,则系统默认分配一个端口给此socket,推荐使用缺省port绑定地址,因为这样能不避免端口冲突。
data=b‘Hello!‘ s.sendto(data,(‘127.0.0.1,9999‘))
向127.0.0.1端口9999发送数据Hello!
接受数据
while True: data, addr = s.recvfrom(1024)
接收数据用套接字的recvfrom方法参数值为每次接受多少字节数据,上述例子中为每次接受1024自己数据,因为并不是每次都能一次接受完所有数据,所有放在循环中。
一般情况下,像是上例的循环接受数据,会约定一个协议,接受什么样的数据就结束循环,上例中并没有写出。
接受的数据有两个值,data为对方想要发送的数据,addr为对方的地址
注意:
发送和接受的数据是字节流,注意编码和解码。
广播
因为UDP的性质,就是向一个地址发包,其他就不管了,并不需要连接,所以有广播的用法(具体还涉及ip相关知识,这里不做详解)
广播的分组传送给host ID段所涉及的所有计算机。例如,对于10.1.1.0 (255.255.255.0 )网段,其广播地址为10.1.1.255 (255 即为2 进制的11111111 )
#dest = (‘192.168.1.255‘,7788) #要是广播地址不在dest上,便无法使用 #<broadcast>自动获得当前广播地址 dest = (‘<broadcast>‘,7788) s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) #要发送广播,这句必须有 s.setsockopt(socket.SOL_SOCKET,socket.SO_BROADCAST,1)
之后发送数据如常
待续
以上是关于Python学习日志——UDP套接字使用的主要内容,如果未能解决你的问题,请参考以下文章