服务器与客户端通讯测试

服务器与客户端通讯测试

  • 1 服务器与客户端通讯建立
    • 1.1 Main函数
    • 1.2 开启服务器
    • 1.3 客户端连接服务器
    • 1.4 扩展类
  • 2 测试过程
    • 2.1 测试1
    • 2.2 测试2
    • 2.3 测试3
    • 2.4 测试4
  • 3 测试总结

  • 测试服务器与客户端通讯时,发现数据丢包问题非常严重,肯定是自己的问题不会是通讯的问题,经过一系列的测试发现果然是自己的问题。
  • 实际上并未发生丢包,是自己测试的方式有问题,请看一下代码:

1 服务器与客户端通讯建立

  • 在main函数中调用了开启服务器,并处理客户端连接服务器;
  • 服务器监听客户端连接,并开启线程处理客户端发送的消息;
  • 客户端连接服务器后,开启线程一直向服务器发送消息。

1.1 Main函数

static void Main(string[] args)
{string ip = "127.0.0.1";int port = 1234;Server(ip, port);Client(ip, port);Console.ReadKey();
}

1.2 开启服务器

/// <summary>
/// 开启服务器、监听客户端连接、并为(每个)客户端创建线程处理通信
/// </summary>
private static void Server(string ip, int port)
{TcpListener server = new TcpListener(IPAddress.Parse(ip), port);server.Start();new Task(() =>{while (true){//等待客户端连接TcpClient client = server.AcceptTcpClient();//为(每个)客户端创建线程处理通信new Task(() =>{NetworkStream stream = client.GetStream();byte[] buffer = new byte[1024];while (true){// 异步读取客户端发送的消息int bytesRead = stream.Read(buffer, 0, buffer.Length);if (bytesRead == 0)break;Thread.Sleep(0);}}).Start();}}).Start();
}

1.3 客户端连接服务器

/// <summary>
/// 客户端连接服务器,一直向服务器发送消息
/// </summary>
private static void Client(string ip, int port)
{var client = new TcpClient();client.Connect(IPAddress.Parse(ip), port);new Task(() =>{NetworkStream stream = client.GetStream();byte[] buffer = { 0xAA, 0xBB, 0x03, 0x04, 0x5, 0x55 };while (true){stream.Write(buffer, 0, buffer.Length);Thread.Sleep(0);}}).Start();}

1.4 扩展类

public static class Extension
{public static string IntToString(this int num){return num.ToString().PadLeft(2, '0');}public static string ByteToString(this byte b){return Convert.ToString(b, 16).PadLeft(2, '0').ToUpper() + " ";}
}

2 测试过程

2.1 测试1

客户端连接服务器后一直向服务器发送消息

var client = new TcpClient();
client.Connect(IPAddress.Parse(ip), port);
new Task(() =>
{NetworkStream stream = client.GetStream();byte[] buffer = { 0xAA, 0xBB, 0x03, 0x04, 0x5, 0x55 };while (true){stream.Write(buffer, 0, buffer.Length);Thread.Sleep(0);}
}).Start();

那么我们期望服务器每次接受到的消息应该是(如下图),因为我们每次发了一个数据包,也希望服务器接受到的数据包是完整的包,然而之际通讯中并非如此。
在这里插入图片描述
实际上,服务器接收到的数据包是这样的(如下图),当我让服务器没隔两秒接受一次数据时,发现服务器接受到的数据已经装满了整个缓冲区,但是包是按照客户端发送过来的数据完整排列的。
在这里插入图片描述

2.2 测试2

根据测试1,我想看看是不是服务器延迟接受后,数据包真的是按照客户端发送消息的顺序获取的吗,因此我又做了以下测试,客户端发送数据如下,包的大小为1,每次发送自增1:
在这里插入图片描述
我们来看看服务器接受到的数据包,看下图其实我们期望看到的结果。
在这里插入图片描述

2.3 测试3

客户端不间断发送固定大小(包的大小为6)的数据包
在这里插入图片描述
服务器每间隔500毫秒接受一次数据,并且设置缓冲区大小与客户端包的大小相同(包的大小为6),发现服务器接受到了所有的数据,并且是按照整个包接受数据的。
在这里插入图片描述

2.4 测试4

客户端每间断500毫秒,发送固定大小(包的大小为6)的数据包
在这里插入图片描述
服务器不间断的获取客户端消息,设置服务器接受缓冲区(1024)大于客户端发送数据包的大小,
在这里插入图片描述

3 测试总结

  1. 通过上面4种测试方式,我们发现在TCP通讯中无论客户端如何发送数据,服务器都是能够接受到数据的,那么我们就可以理解这句话:

TCP协议(Transimission Control Protocol)是以一种面向连接的、可靠的、基于字节流的传输层通信协议。”;

  1. 由于个人对TCP通讯理解不到位,平常都是以发送指令后等待回复指令,对于高频率的数据传输一般已经定义好了一个数据包,在接受数据时已经知道了发送端数据包的大小,对应的接受数据时设置了相同大小缓冲区,导致我认为我发送了一个包那么获取到的应该也是一个完成的数据包,这个问题我测试了4个小时。
  2. 当然TCP通讯时也不是不可能丢包,要是在不可靠的网络传输中也是会丢包的,常见的网络拥堵、网络故障、数据包碎片化也会导致丢包。

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

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

相关文章

Next.js 中间件鉴权绕过漏洞 (CVE-2025-29927) 复现利用与原理分析

免责声明 本文所述漏洞复现方法仅供安全研究及授权测试使用&#xff1b; 任何个人/组织须在合法合规前提下实施&#xff0c;严禁用于非法目的&#xff1b; 作者不对任何滥用行为及后果负责&#xff0c;如发现新漏洞请及时联系厂商并遵循漏洞披露规则。 漏洞原理 Next.js 是一个…

基于STC89C51的太阳自动跟踪系统的设计与实现—单片机控制步进电机实现太阳跟踪控制(仿真+程序+原理图+PCB+文档)

摘 要 随着我国经济的飞速发展&#xff0c;促使各种能源使用入不敷出&#xff0c;尤其是最主要的能源&#xff0c;煤炭石油资源不断消耗与短缺&#xff0c;因此人类寻找其他替代能源的脚步正在加快。而太阳能则具有无污染﹑可再生﹑储量大等优点&#xff0c;且分布范围广&…

在 Mermaid 流程图里“驯服”quot;的魔法指南!!!

&#x1f409; 在 Mermaid 流程图里“驯服”"的魔法指南 在使用 Mermaid 画流程图时&#xff0c;是不是经常遇到想秀一波 &quot; 却被它“反杀”的情况&#xff1f;&#x1f3af; 今天就来教大家如何在这头代码野兽的嘴里&#xff0c;抢回我们的双引号实体编码&#…

SQL语句---DDL

文章目录 1、SQL语句2、DDL2.1 数据库的操作显示当前的数据库创建数据库指定编码删除数据库切换当前数据库 2.2 数据表的操作显示表创建表显示表结构修改表添加新的字段删除原有字段 修改原有字段删除数据表 2.3 Mysql数据库中常用的数据类型 1、SQL语句 结构化查询语句&#…

界面控件Telerik和Kendo UI 2025 Q1亮点——AI集成与数据可视化

Telerik DevCraft包含一个完整的产品栈来构建您下一个Web、移动和桌面应用程序。它使用HTML和每个.NET平台的UI库&#xff0c;加快开发速度。Telerik DevCraft提供完整的工具箱&#xff0c;用于构建现代和面向未来的业务应用程序&#xff0c;目前提供UI for ASP.NET MVC、Kendo…

信源的分类及数学模型

信源的分类及数学模型 按照信源发出的时间和消息分布分为离散信源和连续信源 按照信源发出符号之间的关系分为无记忆信源和有记忆信源 单符号离散信源&#xff08;一维离散信源&#xff09; 信源输出的消息数有限或可数&#xff0c;且每次只输出符号集的一个消息 样本空间&…

Flask项目部署:Flask + uWSGI + Nginx

目录 1,网络架构 2,环境安装 2.1,安装yum:Shell软件包管理器 2.2 安装python 2.3 安装uWSGI 2.4 安装Flask 3,上传工程包到服务器,打包Flask项目 4,创建和配置 uwsgi 配置文件 uwsgi.ini 4.1配置文件 4.2配置文件注释详解 5,启动服务 6,安装nginx 7,nginx配置 8,…

05-SpringBoot3入门-整合SpringMVC(配置静态资源、拦截器)

1、说明 在01-SpringBoot3入门-第一个项目-CSDN博客中&#xff0c;其实就已经整合了SpringMVC。下面讲解怎么配置静态资源和拦截器 2、配置静态资源 命名&#xff1a;static&#xff08;文件夹&#xff09; 位置&#xff1a;src/main/resources 编写一个html文件 访问 http:/…

外包干了一个月,技术明显进步。。。。。

先说一下自己的情况&#xff0c;本科生&#xff0c;19年通过校招进入南京某软件公司&#xff0c;干了接近2年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了2年的功能测试&…

出海企业数字化为什么需要双层架构ERP?工博深度解析SAP ERP公有云方案

目录 什么是双层架构ERP&#xff1f; SAP双层架构ERP四大核心优势 标准化与集成 敏捷性与创新 成本与风险控制 合规与自主性 企业海外业务扩张时&#xff0c;可能由于文化差异、经验差异、合规要求和不断变化的地理政治环境等因素&#xff0c;使总部系统的在海外的推广充…

LVS的 NAT 模式实验

文章目录 目录 文章目录 概要 IP规划与题目分析 实验步骤 一、nginx配置&#xff08;rs1、rs2、rs3&#xff09; 二、LVS配置 三、客户端配置 四、防火墙和selinux配置 实验结果 痛点解答 概要 LVS/NAT lvs/nat网络地址转换模式&#xff0c;进站/出站的数据流量经过分发器(IP负…

MySQL Binlog

MySQL Binlog MySQL Binlog 介绍查看 Binlog 位点开启和关闭 BinlogBinlog 的作用Binlog 记录的格式Binlog 的解析Binlog 加密Binlog 的清理根据Binlog文件名删除根据时间删除 Binlog 保留参数Binlog 的落盘Binlog 相关参数 MySQL主从复制&#xff1a;https://blog.csdn.net/a…

第十四届蓝桥杯省赛电子类单片机学习记录(客观题)

01.一个8位的DAC转换器&#xff0c;供电电压为3.3V&#xff0c;参考电压2.4V&#xff0c;其ILSB产生的输出电压增量是&#xff08;D&#xff09;V。 A. 0.0129 B. 0.0047 C. 0.0064 D. 0.0094 解析&#xff1a; ILSB&#xff08;最低有效位&#xff09;的电压增量计算公式…

【随手记】支持多模态输入的 AI Chatbot App

一、Streamlit 1、Streamlit开发文档 官方文档&#xff1a;https://docs.streamlit.io/ 中文文档&#xff1a;https://blog.csdn.net/weixin_44458771/article/details/135495928 2、Streamlit命令行启动 pip install streamlit streamlit run app.py --server.port 85013…

为什么大模型在 OCR 任务上表现不佳?

编者按&#xff1a; 你是否曾经用最先进的大语言模型处理企业文档&#xff0c;却发现它把财务报表中的“$1,234.56”读成了“123456”&#xff1f;或者在处理医疗记录时&#xff0c;将“0.5mg”误读为“5mg”&#xff1f;对于依赖数据准确性的运营和采购团队来说&#xff0c;这…

关于ArcGIS中加载影像数据,符号系统中渲染参数的解析

今天遇到一个很有意思的问题&#xff0c;故记录下来&#xff0c;以作参考和后续的研究。欢迎随时沟通交流。如果表达错误或误导&#xff0c;请各位指正。 正文 当我们拿到一幅成果影像数据的时候&#xff0c;在不同的GIS软件中会有不同效果呈现&#xff0c;但这其实是影像是…

智能舵机:AI融合下的自动化新纪元

在自动化的浪潮中&#xff0c;智能舵机以其独特的魅力和卓越的性能&#xff0c;正引领着自动化产业迈向新的高度。今天&#xff0c;让我们一起走进智能舵机的世界&#xff0c;感受AI技术为其带来的无限可能。 一、智能舵机&#xff1a;自适应控制的先锋 智能舵机&#xff0c;…

计算机二级WPS Office第四套电子表格

解题过程 排名的函数有三个&#xff1a;rank函数、rank.avg函数、rank.eq函数

【数学建模】(启发式算法)蚁群算法(Ant Colony Optimization)的详解与应用

蚁群算法(Ant Colony Optimization)详解与应用 文章目录 蚁群算法(Ant Colony Optimization)详解与应用前言1. 蚁群算法的生物学基础2. 蚁群算法的基本原理2.1 算法框架2.2 状态转移规则2.3 信息素更新规则 3. 蚁群算法的实现4. 蚁群算法的改进4.1 MAX-MIN蚁群系统(MMAS)4.2 精…

基于Springboot的网上订餐系统 【源码】+【PPT】+【开题报告】+【论文】

网上订餐系统是一个基于Java语言和Spring Boot框架开发的Web应用&#xff0c;旨在为用户和管理员提供一个便捷的订餐平台。该系统通过简化餐饮订购和管理流程&#xff0c;为用户提供快速、高效的在线订餐体验&#xff0c;同时也为管理员提供完善的后台管理功能&#xff0c;帮助…