使用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…

Linux网络实战(三)- Samba服务器搭建

Linux网络实战&#xff08;三&#xff09;- Samba服务器搭建 1 安装Samba服务软件编程要求输出输入 2 Samba服务器启动/关闭编程要求输出输入 3 Samba客户端编程要求输出输入 1 安装Samba服务软件 编程要求 本关任务是学会如何在线安装samba软件。 具体编程要求如下&#xf…

两个表归并为有序表

先排序&#xff0c;在逐个比较插入&#xff0c;最坏时间复杂度为表1长度表2长度-1 #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<stdlib.h>typedef struct List {int* elem;//存储空间地址int length;//表长 }List;void sortList(List* p, int …

第3章 决策树

决策树经常处理分类问题&#xff0c;近来的调查表明决策树也是经常使用的数据挖掘算法。 决策树的流程图&#xff1a; 长方形代表判断模块(decision block)&#xff0c;椭圆形代表中止模块(terminating block),表示已经得出结论&#xff0c;可以中止运行。 从判断模块引出左右箭…

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

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

模型实战(19)之 从头搭建yolov9环境+tensorrt部署+CUDA前处理 -> 实现目标检测

从头搭建yolov9环境+tensorrt部署实现目标检测 yolov9虚拟环境搭建实现训练、推理与导出导出onnx并转为tensorrt模型Python\C++ - trt实现推理,CUDA实现图像前处理文中将给出详细实现源码python、C++效果如下:output_video_1 1. 搭建环境 拉去官方代码根据配置下载虚拟环境所…

【JAVA】检查两个字符串是否一致的几种方法

1.使用equals()方法&#xff1a; String str1 "Hello"; String str2 "Hello";boolean areEqual str1.equals(str2); // true 注意&#xff0c;如果有可能遇到null值&#xff0c;使用Objects.equals()方法更为安全&#xff0c;因为它可以避免空指针异常…

B树(B-tree)

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

oracle快速定位数据库瓶颈

oracle快速定位数据库瓶颈 –数据库巡检或性能优化方法各异&#xff0c;但首要的是要发现数据库性能瓶颈&#xff0c;系统自带的statspack,或awr太耗时. 查询数据库等待事件top10,关注前前几个等待事件&#xff0c;关注前三个等待事件是否有因果或关联关系–oracle 9i select…

学习空间转换-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;接下来继续寻找…

Yonbuilder参考

发布移动插件 https://developer.yonyou.com/cloud/moduleStore/publishPlugin Android自定义插件打包 社区问答 https://community.yonyou.com/forum.php?modviewthread&tid232830&searchLogId605932 MarkDown指令使用 https://blog.csdn.net/qq_25821067/article/de…

深入了解 Gitea:轻量级的自托管 Git 服务

在软件开发和团队协作中&#xff0c;版本控制系统是不可或缺的工具。Git 是目前最流行的分布式版本控制系统之一&#xff0c;而 Gitea 则是基于 Git 的一个轻量级、自托管的 Git 服务。本文将介绍 Gitea 的特点、功能和使用方法&#xff0c;帮助读者更好地了解和使用这一工具。…

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

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

Linux 远程联机服务(一)- Telnet服务器

Linux 远程联机服务&#xff08;一&#xff09;- Telnet服务器 第1关&#xff1a;安装Telnet编程要求预期输出输入 第2关&#xff1a;Telnet服务器启动/关闭编程要求预期输出输入 第3关&#xff1a;Telnet远程登录编程要求预期输出输入 第1关&#xff1a;安装Telnet 编程要求 …

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毕业设计 &…