UDP简单服务端客户端代码示例分为两个部分:服务端和客户端。服务端基于UDP协议收发数据,客户端向服务端发送数据并接收服务端的响应。下面详细讲解编写UDP简单服务端客户端代码的步骤。
编写UDP服务端代码
- 创建UDP Socket
import socket
server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
socket.AF_INET
表示IPv4地址族,socket.SOCK_DGRAM
表示UDP传输协议。
- 声明服务端IP地址和端口号
host = 'localhost' # 本机IP地址, 也可以使用'127.0.0.1'
port = 8888 # 设置端口号
- 绑定IP地址和端口
server_socket.bind((host, port))
这表示服务端使用指定地址和端口号进行通信,等待客户端发送数据给它。
- 接收客户端发来的数据
data, addr = server_socket.recvfrom(1024)
server_socket.recvfrom(1024)
表示接收数据,1024
表示数据缓冲区的大小。
- 处理收到的数据并回复响应
# 对收到的数据进行处理
res_data = data.decode('utf-8').upper()
# 回复响应到客户端
server_socket.sendto(res_data.encode('utf-8'), addr)
data.decode('utf-8')
表示将二进制数据转为字符串,.upper()
表示将字符串转为大写。server_socket.sendto(res_data.encode('utf-8'), addr)
表示将处理后的数据发送到客户端。
- 关闭Socket连接
server_socket.close()
这表示服务端与客户端的通信已经结束,关闭连接。
编写UDP客户端代码
- 创建UDP Socket
import socket
client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
- 要发送给服务端的数据
message = "hello world!"
想要发送的数据可以是任何数据类型的对象,这里我们使用字符串类型的数据。
- 声明服务端IP地址和端口号
host = 'localhost' # 本机IP地址, 也可以使用'127.0.0.1'
port = 8888 # 设置端口号
- 向服务端发送数据并接收响应
# 发送数据到服务端
client_socket.sendto(message.encode('utf-8'), (host, port))
# 接收服务端响应
recv_data, addr = client_socket.recvfrom(1024)
print(recv_data.decode('utf-8'))
client_socket.sendto(message.encode('utf-8'), (host, port))
表示将数据发送到服务端,recv_data, addr = client_socket.recvfrom(1024)
表示接收服务端的响应数据。
- 关闭Socket连接
client_socket.close()
编写完以上代码后,你就可以运行服务端和客户端进行测试了。
下面是一个使用Python实现的示例代码,演示如何使用UDP协议进行数据的发送和接收。
示例1:一个简单的UDP服务端和客户端
以下演示代码一个简单的UDP服务端和客户端。
# UDP服务端
import socket
server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
host = 'localhost' # 本机IP地址, 也可以使用'127.0.0.1'
port = 8888 # 设置端口号
server_socket.bind((host, port))
print("监听端口: ", port)
while True:
data, addr = server_socket.recvfrom(1024)
print("接收到了一条消息:", data.decode('utf-8'))
res_data = data.decode('utf-8').upper()
server_socket.sendto(res_data.encode('utf-8'), addr)
# UDP客户端
import socket
client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
host = 'localhost' # 本机IP地址, 也可以使用'127.0.0.1'
port = 8888 # 设置端口号
message = "hello world!"
client_socket.sendto(message.encode('utf-8'), (host,port))
recv_data, addr = client_socket.recvfrom(1024)
print(recv_data.decode('utf-8'))
client_socket.close()
你可以在运行服务端之后,再运行客户端,观察输出结果。
# 运行示例代码
# 执行服务端代码
$ python udp_server.py
# 执行客户端代码
$ python udp_client.py
> HELLO WORLD!
示例2:UDP服务端与客户端交互
以下示例演示如何使用UDP和客户端交互。
# UDP服务端
import socket
server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
host = 'localhost' # 本机IP地址, 也可以使用'127.0.0.1'
port = 8888 # 设置端口号
server_socket.bind((host, port))
print("监听端口: ", port)
while True:
data, addr = server_socket.recvfrom(1024)
print(f"接收到来自{addr}的消息:{data.decode('utf-8')},正在处理...")
# 假设我们在处理之前要请求客户端的一个输入
client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
in_message = "请你输入一个字符串,我会把它转换成大写:"
client_socket.sendto(in_message.encode('utf-8'), addr)
in_data, addr = client_socket.recvfrom(1024)
res_data = in_data.decode('utf-8').upper()
# 假设我们在处理之后要发送一个输出到客户端
out_message = f"结果:{res_data}"
server_socket.sendto(out_message.encode('utf-8'), addr)
print(f"处理结束,发送结果到{addr}:{out_message}")
client_socket.close()
# 关闭连接,进入下一个循环
# UDP客户端
import socket
client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
host = 'localhost' # 本机IP地址, 也可以使用'127.0.0.1'
port = 8888 # 设置端口号
message, addr = client_socket.recvfrom(1024)
print(message.decode('utf-8'))
out_message = input()
client_socket.sendto(out_message.encode('utf-8'), addr)
recv_data, addr = client_socket.recvfrom(1024)
print(recv_data.decode('utf-8'))
client_socket.close()
在运行示例代码之前,我们需要先启动服务端。我们可以直接通过终端运行示例代码。
# 运行示例代码
# 执行服务端代码
$ python udp_server.py
# 执行客户端代码
$ python udp_client.py
# 根据提示要求输入一个字符串,例如"hello"
> 请你输入一个字符串,我会把它转换成大写: hello
# 根据处理结果,客户端将会得到"HELLO"
> 结果:HELLO
总之,这些示例代码向我们展示了如何使用UDP协议进行数据交换。无论何时,只要需要在网络上传输数据,我们都可以使用这个协议。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:UDP简单服务端客户端代码示例 - Python技术站