C# 处理TCP数据的类(服务端)
using System;
using System.Collections.Generic;
using System.Net;
using System.Net.Sockets;
using System.Threading;namespace TestDemo
{/// <summary>/// 处理TCP数据的类(服务端)/// </summary>public class TcpService{/// <summary>/// TCP监听对象/// </summary>private TcpListener tcpListener;/// <summary>/// 创建TCP监听/// </summary>public void CreateListener(int port){// 监听对象tcpListener = new TcpListener(IPAddress.Any, port);tcpListener.Start();// 独立线程监听Thread thread = new Thread(StartListener);thread.Start();}/// <summary>/// 开始监听/// </summary>private void StartListener(){while (true){try{// TCP监听TcpClient tcpClient = tcpListener.AcceptTcpClient();// 多线程处理数据Thread thread = new Thread(new ParameterizedThreadStart(delegate { DealTcpData(tcpClient); }));thread.Start();}catch (Exception ex){// 错误日志Log.WriteError(ex);}}}/// <summary>/// 处理TCP数据/// <para>lv结构:数据的前4个字节(int),记录了数据区的长度</para>/// <para>注意:数据结构根据实际使用情况而定</para>/// </summary>private void DealTcpData(TcpClient tcpClient){try{if (tcpClient.Connected){// 取得流NetworkStream networkStream = tcpClient.GetStream();networkStream.ReadTimeout = 500;networkStream.WriteTimeout = 500;#region 接收数据// 接收数据储存List<byte> list = new List<byte>();// 数据区总长度byte[] lenArr = new byte[4];networkStream.Read(lenArr, 0, lenArr.Length);int dataLen = BitConverter.ToInt32(lenArr, 0);// 读取数据区数据int total = 0;// 每次读取的数据大小int arrLen = 1024;while (true){// 读取数据byte[] arr = new byte[arrLen];int len = networkStream.Read(arr, 0, arr.Length);for (int i = 0; i < len; i++){list.Add(arr[i]);}// 判断数据的是否读取完成total += len;if (dataLen - total <= 0){break;}if (dataLen - total < arrLen){arrLen = dataLen - total;}Thread.Sleep(0);}// 根据功能或实际情况处理接收的数据byte[] receiveData = list.ToArray();#endregion#region 发送数据// 取得数据// 根据功能或实际情况做成需要发送的数据byte[] dataArr = new byte[] { 0x01, 0x02, 0x03, 0x04 }; // 测试数据if (dataArr != null){// 数据长度byte[] lengArr = BitConverter.GetBytes(dataArr.Length);// 拼接数据头(lv结构)byte[] sendArr = new byte[lengArr.Length + dataArr.Length];lengArr.CopyTo(sendArr, 0);dataArr.CopyTo(sendArr, 4);// 发送数据try{lock (networkStream){networkStream.Write(sendArr, 0, sendArr.Length);}}catch { }}#endregion}}catch (Exception ex){// 错误日志Log.WriteError(ex);}finally{// 判断TCP对象是否连接if (tcpClient != null){JudgeTcpConnection(tcpClient);}}}/// <summary>/// 判断TCP对象是否连接/// </summary>private void JudgeTcpConnection(TcpClient tcpClient, int timeout = 3){try{DateTime time = DateTime.Now;while (true){// 超时时间判断if (time.AddSeconds(timeout) < DateTime.Now){break;}// 连接状态判断if (!tcpClient.Connected){break;}else{bool flag = tcpClient.Client.Poll(1000, SelectMode.SelectRead);if (flag){break;}}Thread.Sleep(0);}}catch (Exception ex){// 错误日志Log.WriteError(ex);}finally{// 关闭连接tcpClient.Close();}}}
}
原文地址 https://www.cnblogs.com/smartnn/p/16635584.html
相关文章:
C# 处理TCP数据的类(服务端)
using System; using System.Collections.Generic; using System.Net; using System.Net.Sockets; using System.Threading;namespace TestDemo {/// <summary>/// 处理TCP数据的类(服务端)/// </summary>public class TcpService{/// <s…...
【Jenkins】调用API构建并钉钉通知
文章目录 Jenkins API介绍提交作业带参数的作业API 令牌 Shell调用代码 Jenkins API介绍 Jenkins 提供了远程访问 API。目前它有三种格式: XML JSON Python 远程访问 API 形式为"…/api/" 例如, Jenkins 安装位于https://ci.jenkins.io&a…...
Java NIO三大核心组件
文章目录 一、Buffer1、重要属性2、重要方法1)allocate()创建缓冲区2)put()写入到缓冲区3)flip()翻转4)get()从缓冲区读取5)rewind()倒带6)mark()和reset()7)clear()清空缓冲区8)使用…...
js数据排序方法(sort)?
在JavaScript中,可以使用Array的sort()方法对数据进行排序。下面是一个基本的例子,它展示了如何对一个数组进行升序和降序排序: // 创建一个数字数组 let numbers [2, 9, 1, 5, 8, 6];// 升序排序 let ascending numbers.sort(function(a,…...
若依框架学习笔记_mybatis
一、 在框架中引用的先后顺序 在ruoyi-system的resources下的xml中定义方法在java下的mapper包中引用方法在java下的service包中再引用mapper的方法 二、xml中的写法 标签: resultMap 返回数据sql 查询语句 可包含在其他操作中select 查询insert 插入update 更新…...
虚拟机的发展史:从分时系统到容器化
一、前世 早期计算机的价格非常昂贵,一台计算机可能需要花费几十万甚至上百万美元。例如,ENIAC计算机,作为世界上第一台通用电子数字计算机,当时的造价约为48万美元。科学家或者工程师们需要计算机的能力,但是买不起整…...
季涨约3~8%,DRAM合约价大幅回升 | 百能云芯
据TrendForce的研究显示,第4季DRAM与NAND Flash均价将开始全面上涨。特别是DRAM,预计第4季的合约价将季涨幅约在3%到8%之间。然而,这波上涨是否能持续,取决于供应商是否坚守减产策略以及实际需求的回升程度,尤其值得关…...
LocalDate的用法
日期时间转换 2023-03-30 14:25:00.000 DateTimeFormat(pattern "yyyy-MM-dd HH:mm:ss:sss")private LocalDateTime requestTimeStamp; 2021-06-18T10:46:19.67378508:00 new SimpleDateFormat("yyyy-MM-ddTHH:mm:ss:sssXXX");yyyy-mm-dd hh:mm:ss.sss 05…...
React通过ref获取子组件的数据和方法
父组件 1) ref必须传值, 否则childRef拿不到子组件的数据和方法 注意: 不一定使用app组件, 其他的任何父组件都可以 import "./App.css"; import React, { useEffect, useRef } from "react"; import RefToGetChild from "./components/RefToGetCh…...
Enhancing Self-Consistency and Performance of Pre-Trained Language Model
本文是LLM系列文章,针对《Enhancing Self-Consistency and Performance of Pre-Trained Language Models through Natural Language Inference》的翻译。 通过自然语言推理增强预训练语言模型的自一致性和性能 摘要1 引言2 相关工作3 通过关系检测进行一致性校正4 …...
安防监控视频汇聚平台EasyCVR视频广场搜索异常,报错“通道未开启”的问题排查与解决
安防视频监控系统EasyCVR视频汇聚平台可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等,以及厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等,能对外分发RTSP、RTMP、FLV、…...
css 星星闪烁加载框
今天带来的是普灵普灵的loader闪烁加载框 效果如下 开源精神给我们带来了源码 ,源码如下 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, in…...
代码随想录算法训练营第二十二天丨 二叉树part09
669. 修剪二叉搜索树 思路 递归法 从图中可以看出需要重构二叉树,想想是不是本题就有点复杂了。 其实不用重构那么复杂。 在上图中我们发现节点0并不符合区间要求,那么将节点0的右孩子 节点2 直接赋给 节点3的左孩子就可以了(就是把节点…...
Apipost连接数据库详解
Apipost提供了数据库连接功能,在接口调试时可以使用数据库获取入参或进行断言校验。目前的Apipost支持:Mysql、SQL Sever、Oracle、Clickhouse、达梦数据库、PostgreSQL、Redis、MongoDB 8种数据库的连接操作 新建数据库连接: 在「项目设置…...
让 Visual Studio 用上 ChatGPT
一、简介 Visual chatGPT Studio 是 Visual Studio 的一个免费扩展,它直接在 IDE 中添加了 chatGPT 功能。它允许用户以可以根据菜单功能的方式使用 chatGPT。 二、功能介绍 该扩展提供了一组使用 ChatGPT 命令,可以在编辑器中选择你需要处理的代码或…...
如何删除错误堆栈里的数据
修改某个主数据。然后发现N年前,某位开发在DTP上做了一个错误堆栈。 这里面有很多历史错误信息,有几千条了,一条条删肯定不可能。 如果不删除,DTP增量无法激活,明天处理链肯定出问题。 于是找到一位印度大神的方法&a…...
k8s使用minio分布式集群作为存储--基础配置篇
背景:minio分布式集群是单独的服务,并没有被k8s管理,k8s与minio集群在不同的服务器上部署,k8s需要使用minio分布式集群作为k8s集群的配置文件及其他文件的存储介质。 1、安装fuse: sudo yum install fuse1.1查询是否有fusemount3 sudo find / -name fusermount31.2确认…...
@Autowired 到底是怎么把变量注入进来的?
[toc] 在 Spring 容器中,当我们想给某一个属性注入值的时候,有多种不同的方式,例如可以通过构造器注入、可以通过 set 方法注入,也可以使用 Autowired、Inject、Resource 等注解注入。 今天我就来和小伙伴们聊一聊,Au…...
【Python学习笔记】函数
1. 函数组成 Python中,我们是这样定义函数的: def function(para1, para2):print("func start")print(para1)print(para2)print("func end")print("让技术总监面试 求职者")return "func return"def 是关键字…...
简单实现一个todoList(上移、下移、置顶、置底)
演示 html部分 <!DOCTYPE html> <html> <head><title>表格示例</title> </head> <body><table border"1"><thead><tr><th>更新时间</th><th>操作</th></tr></thead…...
HCPL-0700-000E,低输入电流、高增益且与高安全隔离性能的光耦
型号介绍今天我要向大家介绍的是 Broadcom 的光耦——HCPL-0700-000E。它的内部结构就像一个高效的“信号转换站”,结合了一个发光二极管和一个集成的高增益光子探测器。光电二极管和输出级采用独立引脚设计,当输入端接收到电流时,LED 会发出…...
数据安全与性能瓶颈困扰企业?湖南天硕SSD固态硬盘带来航天级稳定体验
在数字化转型加速的今天,企业数据量呈指数级增长,随之而来的数据安全风险与存储性能瓶颈已成为众多企业,尤其是对数据可靠性要求极高的B端用户(如企业采购负责人、技术总监)面临的共同挑战。传统存储方案在应对复杂业务…...
三步掌握BilibiliDown:打造你的B站视频离线收藏库
三步掌握BilibiliDown:打造你的B站视频离线收藏库 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader 😳 项目地址: https://gitcode.com/gh_mirrors/bi/Bi…...
避坑指南:用OpenCompass 0.2.4评测InternLM2时,为什么MMLU数据集必须用旧版?
避坑指南:OpenCompass 0.2.4评测InternLM2时MMLU数据集版本兼容性实战解析 当你在深夜调试大模型评测代码,屏幕突然弹出"Dataset version mismatch"的红色报错时,是否也经历过那种头皮发麻的崩溃感?最近我们团队在使用O…...
基于LSTM的CasRel模型变体实现与性能对比分析
基于LSTM的CasRel模型变体实现与性能对比分析 最近在关系抽取这个领域,大家的目光似乎都被Transformer架构给吸引走了。确实,像BERT、RoBERTa这些基于自注意力机制的模型,在各类NLP任务上表现都相当亮眼。但这就让我产生了一个疑问ÿ…...
基于python的演唱会抢票系统
目录同行可拿货,招校园代理 ,本人源头供货商核心功能模块技术实现要点扩展功能设计异常处理方案项目技术支持源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作同行可拿货,招校园代理 ,本人源头供货商 核心功能模块 用户管理模块 注册/登录功…...
JienDa聊PHP:ThinkPHP 8.0 企业级API开发与性能调优实战
1. ThinkPHP 8.0企业级API开发基础 ThinkPHP 8.0作为现代化PHP框架的代表,在企业级API开发领域展现出强大的优势。我最近刚用TP8完成了一个日活50万的电商平台API重构,实测下来性能提升非常明显。相比传统开发方式,TP8的API开发流程更加规范…...
AlphaFold单元测试:代码质量保证
AlphaFold单元测试:代码质量保证 【免费下载链接】alphafold Open source code for AlphaFold 2. 项目地址: https://gitcode.com/GitHub_Trending/al/alphafold 引言:为什么AlphaFold需要严格的单元测试? AlphaFold作为革命性的蛋白…...
如何通过Cowabunga Lite实现iOS安全定制与个性体验
如何通过Cowabunga Lite实现iOS安全定制与个性体验 【免费下载链接】CowabungaLite iOS 15 Customization Toolbox 项目地址: https://gitcode.com/gh_mirrors/co/CowabungaLite 1. 三分钟完成首次配置:从连接到应用的极简流程 当你第一次打开Cowabunga Lit…...
Cursor Pro功能持续访问解决方案:系统化AI编程助手权限管理方法论
Cursor Pro功能持续访问解决方案:系统化AI编程助手权限管理方法论 【免费下载链接】cursor-free-vip [Support 0.45](Multi Language 多语言)自动注册 Cursor Ai ,自动重置机器ID , 免费升级使用Pro 功能: Youve reach…...
