UDP 编程

UDP 编程

服务端例子

TCP 发送数据的时候, 会建立好 TCP 的连接, 所以不需要指定地址, 而 UDP 是面向无连接的, 每次发送都需要指定发送给谁。

# udp_server.py

import socket

HOST = '127.0.0.1'
PORT = 5000

s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 创建套接字时类型选择 SOCK_DGRAM
s.bind((HOST, PORT)) # 绑定套接字到本地 IP 与端口(传入的是 tuple)

# UDP 不需要监听连接

print(f'Server start at: {HOST}:{PORT}')

while True:
    data, addr = s.recvfrom(1024) # 不需要接收连接, 直接接收数据
    print(f'Received from {addr}')
    data = data.decode('utf-8')
    print(data)
    s.sendto(bytes(f'Server received {data}', encoding='utf-8'), addr) # 给客户端发送数据

s.close()

客户端例子

# udp_client.py

import socket


HOST = '127.0.0.1'
PORT = 5000


s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 不需要用 connect() 方法连接到服务器


while True:
    cmd = input('Input your msg:')
    s.sendto(bytes(cmd, encoding='utf-8'), (HOST, PORT))
    data, addr = s.recvfrom(1024)
    print(data.decode('utf-8'))

启动服务端和客户端

启动服务器:

> python udp_server.py
Server start at: 127.0.0.1:5000
Received from ('127.0.0.1', 55893)
你好 # 客户端发送的消息
Received from ('127.0.0.1', 55893)
告辞 # 客户端发送的消息

启动客户端:

> python udp_client.py
Input your msg:你好 # 输入要发送的内容
Server received 你好 # 服务端返回的内容
Input your msg:告辞
Server received 告辞
Input your msg:

你可能感兴趣的:(UDP 编程)