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日

相关文章

  • 10分钟搞定让你困惑的 Jenkins 环境变量过程详解

    下面是“10分钟搞定让你困惑的 Jenkins 环境变量过程详解”的完整攻略。 什么是 Jenkins 环境变量? 在 Jenkins 中,环境变量代表着许多有用的信息,如构建号,构建时间等。使用环境变量可以帮助您更方便地编写构建脚本。 Jenkins 环境变量的使用 Jenkins 环境变量是由插件“EnvInject”提供支持,安装并启用此插件即可使用。…

    other 2023年6月27日
    00
  • 大小写字母转换的shell脚本代码

    大小写字母转换的Shell脚本代码攻略 在Shell脚本中,可以使用内置的命令和操作符来实现大小写字母的转换。下面是一个详细的攻略,包含了两个示例说明。 1. 转换为大写字母 要将字符串中的小写字母转换为大写字母,可以使用tr命令。tr命令用于字符替换和删除操作。 以下是一个示例代码,将输入的字符串转换为大写字母: #!/bin/bash echo \&qu…

    other 2023年8月17日
    00
  • A、B、C类IP地址的具体划分方法及同一个子网的判断方法

    A、B、C类IP地址的具体划分方法 IP地址是用于在互联网上唯一标识设备的一组数字。根据IP地址的前几位,可以将其分为A、B、C类。下面是每个类别的具体划分方法: A类IP地址:A类IP地址的第一个字节范围是1到126。A类地址的网络部分占用了8个比特位,而主机部分占用了24个比特位。这意味着A类地址可以支持最多的网络数量,每个网络可以容纳最多1677721…

    other 2023年7月29日
    00
  • 快速启动软件之rolan使用方法

    快速启动软件之Roland使用方法 简介 快速启动软件是一款可以帮助用户快速启动程序和文件的工具软件。其中,Rolan是快速启动软件的功能之一,能够在Windows操作系统上运行,可以非常方便地执行各种操作。本文将详细讲解Roland的使用方法。 安装和配置 首先,需要到快速启动软件官网 https://quickaccesspopup.com/zh-cn/…

    其他 2023年4月16日
    00
  • OpenLayers3加载常用控件使用方法详解

    OpenLayers3加载常用控件使用方法详解 OpenLayers3是一个开源的WebGIS框架,它可以帮助我们方便地在浏览器上展示地图和各种地理信息数据。控件是OpenLayers3中经常使用的一种组件,它能够为地图添加一些常用的功能按钮,比如放大缩小、全屏、鼠标指针等。本文将详细介绍如何加载OpenLayers3中常用控件,并且提供两个示例以供参考。 …

    other 2023年6月27日
    00
  • 帝国cms 批量替换字段值使用说明

    来讲解一下“帝国CMS批量替换字段值使用说明”的攻略吧。 介绍 帝国CMS是一款中小型网站建设系统,批量替换字段值是其一项非常方便的功能,可用于更改网站中的某些数据。这个功能的使用方法相对简单,下面我将为大家详细地讲解一下。 使用步骤 登录后台管理界面,在“内容管理”中找到要操作的数据项,点击“批量替换”按钮。 在“批量替换”页面中,选择要替换的字段名称和替…

    other 2023年6月25日
    00
  • 教你如何使用MySQL8递归的方法

    教你如何使用MySQL8递归的方法 当我们需要在MySQL中进行分层查询时,递归查询是非常有用的技巧。MySQL8中提供了WITH RECURSIVE语句来实现递归查询。本文将详细讲解如何使用MySQL8递归的方法,帮助您更好的理解递归查询。 WITH RECURSIVE语句基本语法 WITH RECURSIVE语句的基本语法如下: WITH RECURSI…

    other 2023年6月27日
    00
  • Android仿淘宝头条向上滚动广告条ViewFlipper

    Android仿淘宝头条向上滚动广告条ViewFlipper攻略 1. 简介 在Android应用中实现仿淘宝头条向上滚动广告条的效果可以使用ViewFlipper组件。ViewFlipper是一个可以自动切换子视图的容器,可以通过设置动画效果实现向上滚动的效果。 2. 实现步骤 以下是实现该效果的步骤: 步骤1:添加ViewFlipper到布局文件 首先,…

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