UDP则是面向无连接的通信协议。
1.UDP TCP是建立可靠连接,并且通信双方都可以以流的形式发送数据。相对TCP,UDP则是面向无连接的协议。
使用UDP协议时,不需要建立连接,只需要知道对方的IP地址和端口号,就可以直接发数据包。但是,不能保证一定送达。虽然用UDP传输数据不可靠,但它的优点是和TCP比,速度快,对于不要求可靠到达的数据,就可以使用UDP协议。
UDP通信过程如下: 服务器:创建套接字->绑定套接字->数据接收/发送 客户端:创建套接字->数据接收/发送
2.实例
使用UDP实现客户端与服务器的聊天。
服务器
# -*- coding: utf-8 -*-
# @Time : 2022/5/9 8:45
# @File : udp_server.py
# @Software : PyCharm
from socket import *
from time import ctime
HOST = '127.0.0.1'
PORT = 8888
BUFSIZE = 4096
ADDR = (HOST, PORT)
udpServer = socket(AF_INET, SOCK_DGRAM)
udpServer.bind(ADDR)
while 1:
print('等待客户端的消息...')
while True:
data, addr = udpServer.recvfrom(BUFSIZE)
print(data.decode())
if data.startswith('bye'.encode()):
break;
send_data = input('[Server]:')
buf = '[' + ctime() + ']' + send_data
udpServer.sendto(buf.encode(), addr)
if (send_data == 'bye'):
break;
udpServer.close()
客户端
# -*- coding: utf-8 -*-
# @Time : 2022/5/9 8:47
# @File : udp_client.py
# @Software : PyCharm
from socket import *
HOST = 'localhost'
PORT = 8888
BUFSIZE = 4096
ADDR = (HOST, PORT)
udpClient = socket(AF_INET, SOCK_DGRAM)
while 1:
data = input('[Client]:')
udpClient.sendto(data.encode(), ADDR)
if data == 'bye':
break
data, ADDR = udpClient.recvfrom(BUFSIZE)
print(data.decode())
if data.endswith('bye'.encode()):
break
udpClient.close()
运行结果:
#客户端聊天过程
[Client]:hello server
[Mon May 9 09:10:10 2022]hello client
[Client]:bye
#服务器聊天过程
等待客户端的消息...
hello server
[Server]:hello client
bye
等待客户端的消息...