← 返回首页
Python3基础教程(七十三)
发表时间:2022-05-08 08:05:44
UDP

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
等待客户端的消息...