本文共 3358 字,大约阅读时间需要 11 分钟。
服务端通过UDP协议接收并处理客户端发送的数据报。注意:UDP是无连接的,服务端和客户端的启动顺序不影响通信。服务端通过bind指定IP地址和端口,接收数据时使用recvfrom获取客户端信息,并通过sendto发送响应数据。
import socketserver = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)server.bind(('127.0.0.1', 8123))while True: data_bytes, client_addr = server.recvfrom(1024) server.sendto(data_bytes.upper(), client_addr) print('数据接收并发送成功')server.close() 客户端通过UDP协议向服务端发送数据报。客户端发送数据时使用sendto指定目标IP地址和端口,接收数据时使用recvfrom获取服务端信息。
import socketclient = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)ip_port = ('127.0.0.1', 8123)while True: msg = input("请输入要发送的消息:").strip() client.sendto(msg.encode("utf-8"), ip_port) data_bytes, server_addr = client.recvfrom(1024) print("收到的数据:", data_bytes.decode("utf-8")) print("发送地址:", server_addr)client.close() 使用UDP协议的服务端可以直接接收和发送完整的数据报,不需要额外处理粘包层。服务端通过recvfrom获取客户端发送的数据以及对应的IP地址和端口。
import socketserver = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)server.bind(('127.0.0.1', 8084))while True: data, client_addr = server.recvfrom(1024) print("收到的数据:", data) print("客户端地址:", client_addr)server.close() 客户端通过UDP协议发送完整的数据报,服务端可以直接接收并处理。客户端发送数据时使用sendto指定目标IP地址和端口。
import socketclient = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)client.sendto('hello'.encode('utf-8'), ('127.0.0.1', 8084))client.sendto('world'.encode('utf-8'), ('127.0.0.1', 8084))client.close() UDP协议是无连接的,客户端和服务端的通信不需要建立连接,任意一方可以随时发送数据。
UDP协议的数据报包含数据部分和头信息,服务端接收到的数据可能为空,但数据报头仍然有效。因此,服务端可以通过接收数据报的头信息判断是否有有效数据。
UDP协议不保证数据的可靠传输。如果客户端发送的数据在传输过程中丢失,服务端将无法接收到完整的数据。这种特性使得UDP协议适用于对数据丢失不敏感的场景。
服务端接收客户端发送的时间格式化字符串,并返回格式化后的时间。
from socket import *from time import strftimeserver = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)server.bind(('127.0.0.1', 8908))print("服务器已启动,等待客户端连接...")while True: msg, addr = server.recvfrom(1024) if not msg: fmt = "%Y-%m-%d %X" else: fmt = msg.decode("utf-8") time_fmt = strftime(fmt) server.sendto(time_fmt.encode("utf-8"), addr)server.close() 客户端实现:from socket import *client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)ip_port = ('127.0.0.1', 8908)while True:inp = input("请输入时间格式(例如:%Y-%m-%d):").strip()client.sendto(inp.encode("utf-8"), ip_port)date = client.recv(1024)print(date.decode("utf-8"))client.close()
通过UDP协议实现多用户之间的实时聊天,服务端接收客户端的消息并转发给目标用户。
服务端实现:import socketip_port = ('127.0.0.1', 8081)udp_server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)udp_server.bind(ip_port)print("服务器已启动,等待消息...")while True:message, addr = udp_server.recvfrom(1024)print(f"来自[{addr[0]}:{addr[1]}]的消息:{message.decode('utf-8')}")response = input("输入回复消息:").strip()if response:udp_server.sendto(response.encode('utf-8'), addr)else:breakudp_server.close()
客户端实现:import socketudp_client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)while True:chat_name = input("请选择聊天对象:").strip()while True:message = input("请输入消息,回车发送:").strip()if message == 'quit':breakif not message:continuetarget_ip_port = {"淘小欣": ("127.0.0.1", 8881),"shawn": ("127.0.0.1", 8881),"派大星": ("127.0.0.1", 8881),"派大星的真心话": ("127.0.0.1", 8881)}[chat_name]udp_client.sendto(message.encode('utf-8'), target_ip_port)response, addr = udp_client.recvfrom(1024)print(f"来自[{addr[0]}:{addr[1]}]的回复:{response.decode('utf-8')}")if response:breakif message == 'quit':breakudp_client.close()
转载地址:http://rtto.baihongyu.com/