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

SERVER_IP = ('192.168.1.5', 19999)
BUFFER_SIZE = 1024


def 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_IP
    client = 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, e

    while True:
        answer = input('input the message:')
        client.sendto(answer.encode(), SERVER_IP)
        if 'quit' in answer:
            break

    client.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上,最好关闭如下设置:

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

无限滚动分页加载与下拉刷新技术探析:原理深度解读与实战应用详述

滚动分页加载(也称为无限滚动加载、滚动分页等)是一种常见的Web和移动端应用界面设计模式,用于在用户滚动到底部时自动加载下一页内容,而无需点击传统的分页按钮。这种设计旨在提供更加流畅、连续的浏览体验,减少用户交…

Redis 如何实现分布式锁

课程地址 单机 Redis naive 版 加锁: SETNX ${lockName} ${value} # set if not exist如果不存在则插入成功,返回 1,加锁成功;否则返回 0,加锁失败 解锁: DEL ${lockName}问题1 2 个线程 A、B&#…

深入理解与实践“git add”命令的作用

文章目录 **git add命令的作用****git add命令的基本作用****高级用法与注意事项** git add命令的作用 引言: 在Git分布式版本控制系统中,git add命令扮演着至关重要的角色,它是将本地工作区的文件变动整合进版本控制流程的关键步骤。本文旨…

使用docker搭建GitLab个人开发项目私服

一、安装docker 1.更新系统 dnf update # 最后出现这个标识就说明更新系统成功 Complete!2.添加docker源 dnf config-manager --add-repohttps://download.docker.com/linux/centos/docker-ce.repo # 最后出现这个标识就说明添加成功 Adding repo from: https://download.…

ConcurrentHashMap 源码分析(一)

一、简述 本文对 ConcurrentHashMap#put() 源码进行分析。 二、源码概览 public V put(K key, V value) {return putVal(key, value, false); }上面是 ConcurrentHashMap#put() 的源码,我们可以看出其核心逻辑在 putVal() 方法中。 final V putVal(K key, V val…

在centos系统中使用boost库

打开MobaXterm软件 下载 boost_1_85_0.tar.gz tar -zxvf boost_1_85_0.tar.gz解压缩成boost_1_85_0文件夹 双击arrayDemo.cpp 在里面可以编写代码 arrayDemo.cpp #include <boost/timer/timer.hpp> #include <boost/array.hpp> #include <cmath> #inc…

Redis中的Lua脚本(六)

Lua脚本 清空repl_scriptcache_dict字典 每当主服务器添加一个新的从服务器时&#xff0c;主服务器都会清空自己的repl_scriptcache_dict字典&#xff0c;这是因为随着新从服务器的出现&#xff0c;repl_scriptcache_字典里面记录的脚本已经不再被所有从服务器载入过&#xf…

天梯赛 L2-052 吉利矩阵

//r[n]:当前第几列的值。 //l[n]:当前第几行的值。 暴力减止 #include<bits/stdc.h> using namespace std; #define int long long const int n1e3; int a,b,c,l[n],r[n],an; void dfs(int x,int y) {if(xb1){an;return ;}for(int i0;i<a;i){l[x]i;r[y]i;if(l[x]&l…

【001_音频开发-基础篇-专业术语】

001_音频开发-基础篇-专业术语 文章目录 001_音频开发-基础篇-专业术语创作背景术语表常见音源HDMI相关声音系统立体声2.1 声音系统5.1 环绕声系统5.1.2 环绕声系统7.1 环绕声系统7.1.4 环绕声系统9.1.4 环绕声系统 音质等级定义QQ音乐网易云音乐 创作背景 学历代表过去、能力…

ubuntu安装QEMU

qemu虚拟机的使用&#xff08;一&#xff09;——ubuntu20.4安装QEMU_ubuntu安装qemu-CSDN博客 遇到的问题&#xff1a; (1)本来使用git clone https://github.com/qemu/qemu.git fatal: 无法访问 https://github.com/qemu/qemu.git/&#xff1a;GnuTLS recv error (-110): …

IoT、IIoT、AIoT的区别是什么?

一、IoT、IIoT、AIoT的区别是什么&#xff1f; IoT、IIoT和AIoT都是物联网&#xff08;Internet of Things&#xff09;的不同应用和发展方向&#xff0c;但它们之间存在一些区别。 IoT&#xff08;物联网&#xff09;&#xff1a;物联网是指通过互联网连接各种物理设备&#x…

密码学 | 数字证书:应用

&#x1f951;原文&#xff1a;数字签名和数字证书的原理解读 - 知乎 &#x1f951;前文&#xff1a;密码学 | 数字签名 数字证书 - CSDN &#x1f951;提示&#xff1a;把客户端想成 Alice&#xff0c;服务器端想成 Bob 即可。客户端实际上指的是客户端浏览器。 下面&#…

openGauss学习笔记-267 openGauss性能调优-TPCC性能调优测试指导-网络配置-网卡多中断队列设置

文章目录 openGauss学习笔记-267 openGauss性能调优-TPCC性能调优测试指导-网络配置-网卡多中断队列设置267.1 操作步骤 openGauss学习笔记-267 openGauss性能调优-TPCC性能调优测试指导-网络配置-网卡多中断队列设置 本章节主要介绍openGauss数据库内核基于鲲鹏服务器和openE…

目标检测网络YOLO进化之旅

yolo系列网络在目标检测领域取得了巨大的成功&#xff0c; 尤其是在工程实践中&#xff0c; 以其出色的性能优势获得了广泛的应用落地。 YOLO的前3个版本是由同一个作者团队出品&#xff0c; 算是官方版本。 之后的版本都是各个研究团队自己改进的版本&#xff0c; 之间并无明…

微软如何打造数字零售力航母系列科普01 --- Azure顾问(AZURE Advisor)简介

Azure顾问&#xff08;AZURE Advisor&#xff09;简介 目录 一、什么是AZURE顾问&#xff08;AZURE Advisor&#xff09;&#xff1f; 二、常见问题 三、接下来的步骤 一、什么是AZURE顾问&#xff1f; AZURE顾问是一种数字云助手&#xff0c;可帮助您遵循最佳实践来优化Az…

设计模式——2_A 访问者(Visitor)

文章目录 定义图纸一个例子&#xff1a;如何给好奇宝宝提供他想知道的内容菜单、菜品和配方Menu(菜单) & Cuisine(菜品)Material(物料、食材) 产地、有机蔬菜和卡路里Cuisine & Material 访问者VisitorCuisine & Material 碎碎念访问者和双分派访问者和代理写在最后…

初学者如何选择ARM开发硬件?

1&#xff0e; 如果你有做硬件和单片机的经验,建议自己做个最小系统板&#xff1a;假如你从没有做过ARM的开发&#xff0c;建议你一开始不要贪大求全&#xff0c;把所有的应用都做好&#xff0c;因为ARM的启动方式和dsp或单片机有所不同&#xff0c;往往会碰到各种问题&#xf…

设计模式-创建型-抽象工厂模式-Abstract Factory

UML类图 工厂接口类 public interface ProductFactory {Phone phoneProduct();//生产手机Router routerProduct();//生产路由器 } 小米工厂实现类 public class XiaomiFactoryImpl implements ProductFactory {Overridepublic Phone phoneProduct() {return new XiaomiPhone…

使用 kubeadm 进行证书管理

使用 kubeadm 进行证书管理 一&#xff1a;使用 kubeadm 进行证书管理 1.检查证书是否过期 kubeadm certs check-expiration 2.手动续订证书 使用 kubeadm certs renew 命令 可以随时手动续订证书&#xff0c;该命令使用存储在/etc/kubernetes/pki中的 CA (or front-proxy-…

从零开始的vscode配置及安装rust教程

配置vscode的rust环境 下载安装vscodemac 环境1. 下载安装rust2. 配置 mac vscode环境3. 创建一个测试项目 windows 环境1. 安装c运行环境2. 安装配置rustup3. 配置windows vscode环境4. 创建一个测试项目 下载安装vscode 1.官网应用程序下载 vscode&#xff1a;https://code.v…