用户数据报协议(user Datagram protocol)
这个通信协议发送不管对方是否接收到,可以用通过对方接到回复一个标识来记录是否成功通信
适用于广播的应用程序(象发邮件模式)
python UDP (发送接收端)
"""udp服务器"""
import socket
def main():
# 创建一个服务器
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
udp_socket.sendto('xxx'.encode('utf-8'),('127.0.0.1',8090))
udp_socket_recv = udp_socket.recvfrom(1024) # 1024 代表字节数
print(udp_socket_recv) # (b'1', ('192.168.27.119', 8090))
print(udp_socket_recv[0].decode('utf-8'))
print(udp_socket_recv[1])
udp_socket.close()
if __name__ == '__main__':
main()
python UDP 绑定固定端口号
"""udp服务器"""
import socket
def main():
# 创建一个服务器
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
udp_socket.bind(('',8888)) # 绑定固定端口
udp_socket.sendto('xxx'.encode('utf-8'),('127.0.0.1',8090))
udp_socket_recv = udp_socket.recvfrom(1024) # (b'1', ('192.168.27.119', 8090))
print(udp_socket_recv)
print(udp_socket_recv[0].decode('utf-8'))
print(udp_socket_recv[1])
udp_socket.close()
if __name__ == '__main__':
main()
python UDP 简易聊天器
"""聊天小程序--单任务版(只能发一次回一次)"""
import socket
def set_receive_info(rece_info):
rece_ip = input("请输入待接收方的ip:")
rece_port = input("请输入待接收的端口号:")
rece_info = (rece_ip, int(rece_port))
print("接收方主机%s记录成功" % str(rece_info))
return rece_info
def send_message(udp_socket, rece_info):
send_data = input("输入发送的数据:")
udp_socket.sendto(send_data.encode(), rece_info)
print('发送成功.....')
def receive_message(udp_socket):
rec_data = udp_socket.recvfrom(1024)
print('接收到数据,正在解析....', rec_data)
print("收到消息:%s" % rec_data[0].decode('gbk'))
def main():
# 创建一个套接字
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 为这个套接字绑定一个ip和端口号
udp_socket.bind(("192.168.206.1", 9999))
rece_info = '' # 待接收方的主机信息
while True:
print("1.发送消息,2.接收消息,3.重置收信人,4.退出")
num = input("请输入:")
if num == "1":
if rece_info == '':
rece_info = set_receive_info(rece_info)
send_message(udp_socket, rece_info)
elif num == '2':
receive_message(udp_socket)
elif num == '4':
break
elif num == '3':
rece_info = set_receive_info(rece_info)
else:
print('输入无效')
# 关闭一个套接字
udp_socket.close()
if __name__ == '__main__':
main()