使用python socket搭建Client测试平台

目录

概述

1 背景

2 Client功能实现

2.1 何谓Client

2.2 代码功能介绍

2.3 代码实现

2.3.1 代码介绍

2.3.2 代码内容

3 测试

3.1 PC上创建Server

3.2 同一台PC上运行Client

3.2.1 建立连接

3.2.2 测试数据交互

3.3 Linux 环境下运行Client

3.3.1 建立连接

3.3.2 通信功能测试

4 注意问题


概述

本文主要介绍使用Python的Socket搭建一个Server/Client平台,用于测试通信链路的可用性。笔者分别在Windows和linux环境下验证了其可行性,并记录下整个的验证过程。

1 背景

在嵌入式网络功能开发过程中,需要在PC上搭建一个Server,client一般由基于嵌入式功能开发的板卡来实现。在板卡运行功能之前,有必要对PC上的Server进行测试,保证板卡能成功的连接到PC上的Server。因为有的时候,不是Server搭建好了,Cilent就能方便的连上去。可能防火墙等因数,也会引起Client连接Server总是失败。要解决这些问题,前期的测试是非常有必要的,使用Python的Socket接口,能快速的搭建这样的一个平台,且python语言可以运行在不同的平台上。

本文主要介绍使用pyhton实现一个Client,使其运行在不同的平台上,以验证网络链路是否可以正常通信。

2 Client功能实现

2.1 何谓Client

Socket客户端是一个可以向服务器发送请求并接收服务器响应的程序。它使用网络套接字来建立与服务器的连接,并通过套接字进行数据的发送和接收。

Socket客户端的主要功能包括:

  1. 建立连接:Socket客户端通过指定服务器的IP地址和端口号来建立与服务器的连接。连接建立成功后,可以开始进行数据的发送和接收。

  2. 发送数据:Socket客户端可以向服务器发送数据。它可以将数据封装成一个消息或者数据包,并通过套接字发送给服务器。发送数据的方式可以是一次性发送所有数据,也可以是分块逐步发送。

  3. 接收数据:Socket客户端可以从服务器接收数据。它通过套接字接收服务器发送的数据,并进行处理。接收数据的方式可以是一次性接收所有数据,也可以是逐步接收。

  4. 处理错误:Socket客户端可以处理与服务器通信过程中出现的错误。这些错误可能包括连接失败、发送数据失败、接收数据失败等。客户端可以通过捕捉异常或者处理错误码来处理这些错误。

  5. 断开连接:Socket客户端可以断开与服务器的连接。当不再需要与服务器通信时,可以通过关闭套接字来断开连接。

2.2 代码功能介绍

1)在PC上创建一个Server

2) 运行多个Client, 并可以和Server之间能进行发送和接收数据

2.3 代码实现

2.3.1 代码介绍

代码第9行: 定义server IP 和 端口号

代码第13行:定义接收数据的线程函数

代码第15行:通过socket接收server发送到client的数据

代码第16行:  判断数据长度

代码第22行:创建Seocket,选用TCP通信模式

代码第26行:连接Server

代码第28行:创建处理接收数据的线程

代码第29行:启动线程

代码第36行:读取输入数据

代码第37行:client发送数据给server

代码第41行:client断开连接

2.3.2 代码内容

详细代码:

##!/usr/bin/python3
# -*- coding: utf-8 -*-
# @descriptor : client test based on socket
# @Time       : 2024/04/19 20:40
# @Author     : ming fei.tang
import socket
import threadingSERVER_IP = ('192.168.1.5', 19999)
BUFFER_SIZE = 1024def handler_revMessage(client, address):while True:data_from_client: str = client.recv(1024).decode("UTF-8")if len(data_from_client) > 0:print(f"receive the message from server {address} :{data_from_client}")def client_socket():ip, port = SERVER_IPclient = socket.socket(socket.AF_INET, socket.SOCK_STREAM)try:print(f'connect to the server: {ip}:{port} ...')client.connect((ip, port))print(f'connect to {ip}:{port} ready ')t1 = threading.Thread(target=handler_revMessage, args=(client, SERVER_IP))t1.start()except Exception as e:print(f'connect to {ip}:{port} fail ')client.close()assert False, ewhile True:answer = input('input the message:')client.sendto(answer.encode(), SERVER_IP)if 'quit' in answer:breakclient.close()print(f'disconnect {ip}:{port}  server')if __name__ == '__main__':client_socket()

3 测试

3.1 PC上创建Server

笔者使用NetAssist在PC机上创建server,选择协议类型,IP地址和端口号。完成操作后,点击打开,就创建成功了。

3.2 同一台PC上运行Client

3.2.1 建立连接

应用上述使用python socket编写的代码,实现一个client,运行代码

运行Client之后,可以在log中看见:

同时在Server上可以看见如下信息,说明client已经能够正常连接到server:

3.2.2 测试数据交互

1) 在client上发送数据给server

2)server发送数据给client

3.3 Linux 环境下运行Client

3.3.1 建立连接

在Ubuntu上运行Client,PC机上的Server能连接上该Client

在Server上可以看见如下信息,说明通讯链路已经建立起来:

3.3.2 通信功能测试

1) Client发送数据至Server

 Server 收到的数据

2)Server发送数据至Client

Server发送数据功能

 Client接收到的数据

4 注意问题

不同平台上的Client或者Server进行通信时,需要保证相关的IP或者端口号被开放,否则,可能出现通信链路失败的情况。在Windows上,最好关闭如下设置:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/1324.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ElasticSearch实战之项目搜索高亮

文章目录 1. 前情配置2、数据操作2.1 操作API2.2 数据入库 3. 高亮搜索3.1 方法封装3.2 高亮搜索 1. 前情配置 为满足ElasticSearch可在项目中实现搜索高亮&#xff0c;我们需要先做一些前情配置 导入ElasticSearch依赖 <dependency><groupId>org.springframewor…

EPSON晶振应用到汽车电子产品上的型号有哪些?

EPSON品牌应用在汽车电子产品上的晶振.&#xff0c;当然也少不了晶振可能最熟悉的就是32.768K系列和26MHZGPS晶振用的多。 在汽车里每一个部件都应有的不一样,甚至多次使用到同一尺寸,不同频率的晶振.爱普生品牌晶振型号就有几百种,很容易混淆,要想记住汽车里所应用到的不是件…

B树(B-tree)

B树(B-tree) B树(B-tree)是一种自平衡的多路查找树&#xff0c;主要用于磁盘或其他直接存取的辅助存储设备 B树能够保持数据有序&#xff0c;并允许在对数时间内完成查找、插入及删除等操作 这种数据结构常被应用在数据库和文件系统的实现上 B树的特点包括&#xff1a; B树为…

学习空间转换-3D转换

1.什么是空间转换&#xff1f; 使用的是transform属性实现元素在空间内的位移&#xff0c;旋转&#xff0c;缩放等效果。 空间&#xff1a;是从坐标轴角度定义的。x,y,z三条坐标轴构成的一个立体空间&#xff0c;Z轴位置与视线方向相同。 所以空间转换也被叫做3D转换 语法&a…

PICkit 3 v3.10中的 Device Family 识别不到芯片

1&#xff1a;现象描述 在使用 PICkit3烧写hex文件的时候&#xff0c;Device Family只有默认芯片&#xff0c;识别不到当前使用的芯片&#xff0c;导致报错“Device Error - hex file not loaded”&#xff0c;我当前使用的是 PIC16F1826芯片&#xff0c;默认不支持&#xff1…

快速开发部署平台Replit

Replit 是可以快速搭建开发、部署环境的平台。能够快速将原型进行部署&#xff0c;代码编辑器支持协同开发&#xff0c;他的在线编辑器做的不错&#xff0c;相当于云上提供了一个 vscode&#xff0c;代码实时更新。Replit 底层是基于容器技术的&#xff0c;可以安全的隔离多个用…

html、css、QQ音乐移动端静态页面,资源免费分享,可作为参考,提供InsCode在线运行演示

CSDN将我上传的免费资源私自变成VIP专享资源&#xff0c;且作为作者的我不可修改为免费资源&#xff0c;不可删除&#xff0c;寻找客服无果&#xff0c;很愤怒&#xff0c;&#xff08;我发布免费资源就是希望大家能免费一起用、一起学习&#xff09;&#xff0c;接下来继续寻找…

分享|网红阳哥介绍的项目能赚钱吗?具体有哪些项目?

在当今的互联网时代&#xff0c;网红的影响力不容小觑&#xff0c;他们通过分享自己的经验和见解&#xff0c;往往能带动一股潮流或引领一种趋势。其中&#xff0c;网红阳哥以其独到的眼光和丰富的经验&#xff0c;分享了一系列赚钱项目&#xff0c;引起了广泛关注。那么&#…

C语言 逻辑运算符

本文 我们来说 逻辑运算符 有时做出决策需要测试多个条件&#xff0c;C语言提供了用于将简单条件组合成复杂条件的逻辑运算符。 逻辑运算符 如下图 用逻辑运算符连接操作数组成的表达式称为逻辑表达式。 逻辑运算的结果只有0和1 逻辑运算的对象可以是任意数值型&#xff0c;但…

VMWare Ubuntu压缩虚拟磁盘

VMWare中ubuntu会越用越大&#xff0c;直到占满预分配的空间 即使系统里没有那么多东西 命令清理 开机->open Terminal sudo vmware-toolbox-cmd disk shrink /关机-> 编辑虚拟机设置->硬盘->碎片整理&压缩 磁盘应用 开机->disk usage analyzer(应用) …

Springboot+Vue项目-基于Java+MySQL的影城管理系统(附源码+演示视频+LW)

大家好&#xff01;我是程序猿老A&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;Java毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计 &…

苹果 IPA 应用部署软件 iMazing 3 Windows 版获 3.0.0.4 Beta 4

在数字化时代&#xff0c;我们的iOS设备已经成为生活中不可或缺的一部分。为了更加高效、便捷地管理这些设备&#xff0c;iMazing 3.0.0.3 应运而生&#xff0c;它以其独特的功能和卓越的性能&#xff0c;为用户带来了前所未有的全新体验。 首先&#xff0c;iMazing 3.0.0.3 提…

2024第二十一届五一数学建模B题思路 五一杯建模思路

文章目录 1 赛题思路2 比赛日期和时间3 组织机构4 建模常见问题类型4.1 分类问题4.2 优化问题4.3 预测问题4.4 评价问题 5 建模资料 1 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 2 比赛日期和时间 报名截止时间&#xff1a;2024…

机器学习-随机森林算法预测房租模型

文章目录 机器学习-随机森林算法预测房租模型解决问题数据集探索性数据分析数据预处理构建模型并训练结果分析与评估参数调优结果预测模型保存经验总结参考文章 机器学习-随机森林算法预测房租模型 解决问题 根据待租房源相关信息&#xff0c;通过随机森林机器学习算法构件预…

车载以太网DoIP 协议,万字长文详解

&#x1f345; 我是蚂蚁小兵&#xff0c;专注于车载诊断领域&#xff0c;尤其擅长于对CANoe工具的使用&#x1f345; 寻找组织 &#xff0c;答疑解惑&#xff0c;摸鱼聊天&#xff0c;博客源码&#xff0c;点击加入&#x1f449;【相亲相爱一家人】&#x1f345; 玩转CANoe&…

[图解]软件开发中的糊涂用语-03-文档

0 00:00:00,280 --> 00:00:04,550 今天呢&#xff0c;我们来看一个糊涂用语&#xff0c;文档 1 00:00:07,810 --> 00:00:10,106 我们经常听到这样的话 2 00:00:10,106 --> 00:00:10,566 3 00:00:10,566 --> 00:00:13,322 你们怎么一上手就写代码 4 00:00:13,322…

Ps 滤镜:路径模糊

Ps菜单&#xff1a;滤镜/模糊画廊/路径模糊 Filter/Blur Gallery/Path Blur 路径模糊 Path Blur滤镜可以沿路径创建运动模糊&#xff0c;还可以控制形状和模糊量。Photoshop 可自动合成应用于图像的多个路径的模糊效果。 ◆ ◆ ◆ 主要用途 1、相对于动感模糊 Motion Blur滤镜…

【介绍下LeetCode的使用方法】

&#x1f308;个人主页: 程序员不想敲代码啊 &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共…

vulfocus靶场之redis命令执行cve-2022-0543漏洞复现

漏洞&#xff1a; Redis是著名的开源Key-Value数据库&#xff0c;其具备在沙箱中执行Lua脚本的能力。 Debian以及Ubuntu发行版的源在打包Redis时&#xff0c;不慎在Lua沙箱中遗留了一个对象package&#xff0c;攻击者可以利用这个对象提供的方法加载动态链接库liblua里的函数&…

lua整合redis

文章目录 lua基础只适合lua连接操作redis1.下载lua依赖2.导包,连接3.常用的命令1.set,get,push命令 2.自增管道命令命令集合4.使用redis操作lua1.实现秒杀功能synchronized关键字 分布式锁 lua 基础只适合 1.编译 -- 编译 luac a.lua -- 运行 lua a.lua2.命名规范 -- 多行注…