udp网络通信流程:
1、创建套接字
2、绑定端口(接收端必须绑定端口(否则每次通信都要向接收端询问端口号),发送端可不绑定端口;当不绑定端口时,操作系统将随机开启一个端口)
3、发送/接收数据
4、关闭套接字
使用udp传输协议发送信息
import socket
def main():
# 创建udp套接字,使用ipv4协议簇,udp传输协议
s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
while True: # 使用循环可以循环发送Udp数据
# 向127.0.0.1发送“hello” b"hello"是将“hello”改成byte类型
s.sendto(b"hello",('127.0.0.1',8080))
# 从键盘获取数据
send_data = input("请输入要发送的数据")
# 使用utf-8编码发送,此处编码要与接收端解码一致
s.sendto(send_data.encode("utf-8"),('127.0.0.1',8080))
# 输入exit退出循环
if send_data == "exit":
break
s.close() #关闭套接字
if __name__ == "__main__":
main()
使用udp接收数据
import socket
def main():
# 创建udp套接字,使用ipv4协议簇,udp传输协议
s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
s.bind(('127.0.0.1',8080)) # 设置要监听的地址和端口
while True: # 循环接收数据
recv_date = s.recvfrom(1024) # 1024是表示单次最大接收的数据1204字节
# 输出接收到的全部信息
print(recv_date)
# 输出接收的数据信息
print(recv_date[0].decode("utf-8"))
# 输出对端地址与端口信息
print("%s:%s" % (str(recv_date[1][0]),str(recv_date[1][1])))
# 当接收的数据位exit是退出循环
if recv_date[0] == 'exit':
break
s.close()
if __name__ == "__main__":
main()
测试: