博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python实现UDP发送与接收(代码以及代码分析)
阅读量:3949 次
发布时间:2019-05-24

本文共 2281 字,大约阅读时间需要 7 分钟。

目录

1 UDP

UDP是一个无连接的传输协议。UDP作为网络主要传输协议之一,其优势在于速度快(这里的速度快指的是不需要进行连接所节省的时间),支持广播和多播。但是相对的,UDP所传输信息安全都需要应用层来保障,例如:自定义出错重传,自定义的流量控制。某种程度上说,UDP赋予了应用层极大的自由可以自定义规则。

使用Python实现UDP的发送与接收,第一步需要的就是导入 Socket 包,并实例化一个Socket对象。
导入Socket 包 :

import socket

实例化 Socket 对象 :

注意:由于使用UDP,所以在socket()函数的第二个参数应为socket.SOCK_DGRAM 这个参数表示创建的是一个UDP对象。

Udp_Socket = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)

1.1 UDP发送

1.1.1 bind() 绑定IP与端口号

通过Python可以使用固定或不固定端口发送UDP数据。

如果希望固定端口发送UDP,就需要** bind() **函数绑定端口号和IP

Udp_Socket.bind(("127.0.0.1",9090))

如果不需要绑定,系统自动以随机分配的端口发送。

1.1.2 sendto() 发送函数

UDP 相比 TCP 少了许多的步骤与过程,所以直接调用 sendto() 发送函数就可以将需要发送的数据发送至指定IP与端口号。

sendto () :

Udp_Socket.sendto("hello world".encode("gbk"),('127.0.0.1',8080))

需要注意的是:相比于TCP的send()发送,UDP的发送函数sendto()多了一 个to,也就是需要指定发送的位置TCP由于需要先连接后发送或接收所以只要连接成功就可以直接发送或接收而无需指定发送的位置。但UDP为无连接的传输,所以需要在每次发送时指定发送位置。

encode(“gbk”): 这个函数是将你需要发送的数据转为gbk(windows 操作系统的文字编码)编码。
(‘127.0.0.1’,8080):这个就是所要发送的位置的IP与端口号。

1.1.3 close()关闭

在发送过后就可以使用close()关闭 socket

Udp_Socket.close()

1.1.4 UDP发送完整代码

通过循环读取键盘输入,发送数据。当键盘输入 EXIT 时程序结束。

mport socketdef main():    Udp_Socket = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)    localaddr = ("127.0.0.1",9090)    Udp_Socket.bind(localaddr)    while True:         send_data  =  input("请输入发送的数据")        if send_data == "EXIT":            break        Udp_Socket.sendto(send_data.encode("gbk"),('127.0.0.1',8080))        send_data = ""    Udp_Socket.close()    if __name__ == "__main__":    main()

1.2 UDP接收端

1.2.1 bind() 绑定IP与端口号

既然是 接收端那么必定需要知道从哪里接收,所以一定需要绑定IP与端口号

__bind(): __

Udp_Socket.bind(("127.0.0.1",9090))

1.2.2 recvform() 接收

在绑定了端口号之后,就可以接收发送到该端口的数据。这时通过recvform()接收,recvform()相比TCP协议中的接收多了一个form这也就是说明它的返回值中应该多了一些,多的东西就是发送者的地址。

这个recvform()函数的返回值是(data,address)
通过使用Recv_Data[0]的方式获取其中的数据部分。
通过使用Recv_Data[1]的方式获取其中的地址部分。

Recv_Data = udp_socket.recvfrom(1024)Recv_Data = Recv_Data[0]Sender_Addr = Recv_Data[1]print("%s:%s"%(str(Sender_Addr),Recv_Msg.decode("gbk")))

1.2.3 UDP接收完整代码

import socketdef main():    Udp_Socket = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)    Udp_Socket.bind(("127.0.0.1",9090))    Recv_Data = Udp_Socket.recvfrom(1024)    Recv_Msg = Recv_Data[0]    Sender_Addr = Recv_Data[1]    print("%s:%s"%(str(Sender_Addr),Recv_Msg.decode("gbk")))if  __name__ == "__main__":    main()

转载地址:http://duewi.baihongyu.com/

你可能感兴趣的文章
restore factory属性的enable和disable
查看>>
Android LOG机制流程图
查看>>
如何在JNI中抛异常
查看>>
Android应用程序的完全退出
查看>>
Task和Activity相关的一些属性
查看>>
JAVA系统属性之user.home
查看>>
Android代码截屏
查看>>
Android中打印代码的调用层次
查看>>
成功者十三个价值连城的习惯
查看>>
特别成功的人会做6件事
查看>>
Android: 用jni 获取MAC地址
查看>>
字符串列表的C语言实现:c_strlist
查看>>
客户沟通的方式:礼貌待客沟通方式,技巧推广沟通方式,个性服务沟通方式
查看>>
用弹性工作制留住员工
查看>>
知识=经验×反思2
查看>>
领导者如何发现关键问题
查看>>
学习无为领导力
查看>>
卓越领导看过程
查看>>
领导力与各种循环挑战
查看>>
达成谈判协议 - 避免操之过急
查看>>