UDP简单服务端客户端代码示例

UDP简单服务端客户端代码示例分为两个部分:服务端和客户端。服务端基于UDP协议收发数据,客户端向服务端发送数据并接收服务端的响应。下面详细讲解编写UDP简单服务端客户端代码的步骤。

编写UDP服务端代码

  1. 创建UDP Socket
import socket

server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

socket.AF_INET 表示IPv4地址族,socket.SOCK_DGRAM 表示UDP传输协议。

  1. 声明服务端IP地址和端口号
host = 'localhost' # 本机IP地址, 也可以使用'127.0.0.1'
port = 8888      # 设置端口号
  1. 绑定IP地址和端口
server_socket.bind((host, port))

这表示服务端使用指定地址和端口号进行通信,等待客户端发送数据给它。

  1. 接收客户端发来的数据
data, addr = server_socket.recvfrom(1024)

server_socket.recvfrom(1024) 表示接收数据,1024 表示数据缓冲区的大小。

  1. 处理收到的数据并回复响应
# 对收到的数据进行处理
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) 表示将处理后的数据发送到客户端。

  1. 关闭Socket连接
server_socket.close()

这表示服务端与客户端的通信已经结束,关闭连接。

编写UDP客户端代码

  1. 创建UDP Socket
import socket

client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
  1. 要发送给服务端的数据
message = "hello world!"

想要发送的数据可以是任何数据类型的对象,这里我们使用字符串类型的数据。

  1. 声明服务端IP地址和端口号
host = 'localhost' # 本机IP地址, 也可以使用'127.0.0.1'
port = 8888      # 设置端口号
  1. 向服务端发送数据并接收响应
# 发送数据到服务端
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) 表示接收服务端的响应数据。

  1. 关闭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技术站

(0)
上一篇 2023年6月27日
下一篇 2023年6月27日

相关文章

  • 【java必修课】判断string是否包含子串的四种方法及性能对比

    【java必修课】判断string是否包含子串的四种方法及性能对比 在Java中,判断一个字符串是否包含另一个字符串是经常使用的一项操作。本文将介绍四种常见的方法来判断字符串是否包含子串,并对它们的性能进行对比。 方法一:使用contains()方法 Java中String类提供了contains()方法,用于判断一个字符串是否包含另一个字符串。 Strin…

    其他 2023年3月28日
    00
  • Python自动化运维之Ansible定义主机与组规则操作详解

    Python自动化运维之Ansible定义主机与组规则操作详解 本攻略将详细介绍如何使用Python编写Ansible脚本来定义主机和组规则,实现自动化运维。 1. 安装Ansible 首先,确保已经在系统中安装了Ansible。可以使用以下命令来安装Ansible: $ pip install ansible 2. 编写Ansible脚本 接下来,我们将编…

    other 2023年7月28日
    00
  • 辐射4XboxOne手柄按键错误的解决方法

    辐射4 Xbox One 手柄按键错误的解决方法 在辐射4游戏中,有时候玩家会遇到 Xbox One 手柄按键错误的问题,例如按下某个按键无响应,或者按下某个按键后跳出游戏等情况。以下是详细的解决方法: 步骤一:检查手柄电量 首先,我们需要检查 Xbox One 手柄的电量是否充足。如果电量不足,手柄所提供的信号将变弱,导致游戏无法正常响应。在这种情况下,需…

    other 2023年6月27日
    00
  • WPF自定义控件的实现

    实现一个自定义控件需要以下步骤: 第一步:创建控件项目 我们需要在Visual Studio中添加一个WPF Custom Control项目。这个项目将包含一个基本的自定义控件,它是在WPF控件库中支持的标准控件的基础上构建的。 第二步:设计控件外观和交互 首先,我们需要定义自定义控件的外观和行为,这涉及到控件的布局、样式和模板。我们可以使用XAML来描述…

    other 2023年6月25日
    00
  • 简单介绍线性表以及如何实现双链表

    线性表的简介: 线性表是一类数据结构,其特点是数据元素之间存在一种线性关系。换句话说,线性表可以看作是一组有顺序的数据元素的集合,其中每个元素最多只有一个前驱和一个后继。(注:链表也是线性表的一种) 线性表的常见实现方式有数组和链表两种。 双向链表的实现: 双向链表是一种常见的链式存储结构,每个节点除了存储数据之外,还包括指向前驱和后继节点的指针。在操作链表…

    other 2023年6月27日
    00
  • Nginx网站根目录更改及导致403 forbidden的问题解决

    以下是“Nginx网站根目录更改及导致403 forbidden的问题解决”的完整攻略。 背景 在使用Nginx搭建网站时,有时需要更改网站的根目录以适应不同的需求,但更改后可能会导致403 forbidden的问题,本攻略将介绍如何更改Nginx网站根目录并解决403 forbidden的问题。 步骤 1. 修改Nginx配置文件 打开Nginx的配置文件…

    other 2023年6月27日
    00
  • 电脑共享文件控制软件、文档共享管理系统、共享文件监控软件白皮书

    电脑共享文件控制软件攻略 概述 电脑共享文件控制软件是一种可以对多台电脑的文件进行实时控制和共享的工具。通过该软件,可以实现文件的远程管理,避免了由于人为操作失误而导致的数据丢失和泄漏等问题。 操作步骤 下载并安装电脑共享文件控制软件; 打开软件后,将需要共享的文件夹添加到共享列表中; 设置共享权限,如设置访问密码、限定下载权限等; 在其他电脑上下载并安装此…

    other 2023年6月25日
    00
  • 微信小程序 教程之引用

    微信小程序教程之引用攻略 1. 引用的概念 在微信小程序中,引用是指在一个小程序中使用另一个小程序的功能或页面。通过引用,我们可以实现代码的复用,提高开发效率。 2. 引用的使用方法 2.1 引用小程序的页面 要引用另一个小程序的页面,需要在当前小程序的app.json文件中配置引用的小程序的usingComponents字段。示例如下: { \"…

    other 2023年8月20日
    00
合作推广
合作推广
分享本页
返回顶部