C# TcpClient

TcpClient 自己封装的话,还是比较麻烦的,可以基于线程,也可以基于异步写,最好的办法是网上找个插件,我发现一个插件还是非常好用的:STTech.BytesIO.Tcp

下面是这个插件作者的帖子,有兴趣的可以去看看

TcpClient

BytesIO | 零基础轻松看懂 C# TCP客户端(完整源码+视频教程)_sttech.bytesio.tcp-CSDN博客

TcpServer

BytesIO | C# 超简洁的TCP服务端开发(完整源码+视频教程)_c# bytesio-CSDN博客

目前网上大部分帖子都是用 PropertyGrid 控件去实现的,其实没必要

我做了一个简单的界面,如下

代码:

using System;
using System.Collections.Generic;
using System.Windows.Forms;namespace TcpClinetTest2
{public partial class Form1 : Form{public Form1(){InitializeComponent();}STTech.BytesIO.Tcp.TcpClient tcpClient;private void Form1_Load(object sender, EventArgs e){this.tcpClient = new STTech.BytesIO.Tcp.TcpClient();//tcp接收数据时触发的事件this.tcpClient.OnDataReceived += TcpClient_OnDataReceived;//tcp连接成功时触发的事件this.tcpClient.OnConnectedSuccessfully += TcpClient_OnConnectedSuccessfully;//tcp连接断开时触发的事件this.tcpClient.OnDisconnected += TcpClient_OnDisconnected;}private void Form1_FormClosing(object sender, FormClosingEventArgs e){if (this.tcpClient.IsConnected)this.tcpClient.Disconnect();}private void TcpClient_OnDisconnected(object sender, STTech.BytesIO.Core.DisconnectedEventArgs e){Console.WriteLine($"已断开:{e.ReasonCode}");}private void TcpClient_OnConnectedSuccessfully(object sender, STTech.BytesIO.Core.ConnectedSuccessfullyEventArgs e){Console.WriteLine("连接成功");}private void TcpClient_OnDataReceived(object sender, STTech.BytesIO.Core.DataReceivedEventArgs e){Console.WriteLine($"收到数据:{e.Data.EncodeToString("GBK")}");}//连接private void Button_Connect_Click(object sender, EventArgs e){this.tcpClient.Host = "192.168.xx.xx";this.tcpClient.Port = 6666;var result = this.tcpClient.Connect();Console.WriteLine($"结果:{result.IsSuccess},错误码:{result.ErrorCode}");}//断开private void Button_Disconnect_Click(object sender, EventArgs e){this.tcpClient?.Disconnect();}//发送private void Button_Send_Click(object sender, EventArgs e){string message = TextBox_Message.Text;if (string.IsNullOrEmpty(message)){Console.WriteLine("消息框为空");return;}this.tcpClient.Send(message.GetBytes("GBK"));}//清空控制台private void Button_ClearConsole_Click(object sender, EventArgs e){Console.Clear();}//获取在线状态private void Button_GetOnlineStatus_Click(object sender, EventArgs e){Console.WriteLine($"在线状态:{this.tcpClient.IsConnected}");}}
}

在上面的代码中,message.GetBytes("GBK")  是插件作者封装的拓展方法,如下

public static byte[] GetBytes(this string str, string encodeName = "UTF-8")
{return Encoding.GetEncoding(encodeName).GetBytes(str);
}

可以看到,这里用的 Encoding.GetEncoding(encodeName) 去获取 Encoding 编码格式

常见的编码格式有:

utf-8

us-ascii

windows-1252

iso-8859-1

gb2312

gbk

big5

shift_jis

Euc-kr

用法:

Encoding encoding = Encoding.GetEncoding("gb2312");

也可以使用下面代码来查看有那些编码格式

foreach (EncodingInfo encInfo in Encoding.GetEncodings())
{Console.WriteLine($"{encInfo.CodePage} - {encInfo.Name}");
}

end

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

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

相关文章

Mac连接虚拟机(Linux系统)

1.确定虚拟机的IP地址 ifconfig //终端命令,查询ip地址 sudo apt install net-tools 安装完成后再次执行 ifconfig: 2.安装SSH(加密远程登录协议) (1).安装OpenSSH服务器软件包: sudo apt-get install openssh-ser…

【惊艳视界】Perfectly Clear Workbench:让您的图像瞬间焕发生机!

在数字化时代,图像已成为我们生活中不可或缺的一部分。无论是摄影爱好者,还是专业设计师,都渴望拥有一款能够轻松提升图像质量的神奇工具。今天,我们为您带来了一款图像清晰处理软件的佼佼者——Perfectly Clear Workbench&#x…

最新!!2024上半年软考【高级】系统分析师 综合知识真题解析

2024上半年软考考试已经结束了,为大家整理了网友回忆版的系统分析师选择题真题及答案,总共30道题。 上半年考试的宝子们可以对答案预估分数!准备下半年考的宝子可以提前把握考试知识点和出题方向,说不定会遇到相同考点的题目&…

【全开源】知识付费问答社区(FastAdmin+ThinkPHP)

此系统是一款基于FastAdmin和ThinkPHP开发的知识付费问答社区系统,提供全部前后台无加密源代码,拥有强大的付费提问、付费阅读、付费查看、付费邀请、全文搜索等功能模块,其整合了强大的标签模块和专区模块,让问题和文章更好的归类…

python办公自动化——(三)替换PPT文档中图形数据-折线图

数据替换前 数据替换后 代码实现 # 单折线 pathE:\\13 python 下侧双x轴折线图\\ prs Presentation(path双x轴测试-01.pptx) data_timepd.read_excel(path"数据.xlsx",sheet_name单折线)ppt_9prs.slides…

初学JavaScript

什么是JavaScrip: JavaScript 是一种高级编程语言,主要用于网页开发。它是一种动态、弱类型的语言,可以在客户端(浏览器)中运行,并与 HTML 和 CSS 一起用于创建交互式网页。JavaScript 可以添加动态功能&a…

电脑误删除的文件怎么恢复?6个方法图文详解!

“我在电脑上误删除了一些比较重要的文件,现在不知道应该怎么操作了,有没有可以分享一下经验的朋友呀?” 在数字化世界的浪潮中,电脑成为了我们处理、存储和分享信息的重要工具。然而,随着我们对电脑的依赖日益加深&am…

【云原生】kubernetes中Configmap原理解析与应用实战

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…

236. 二叉树的最近公共祖先(C++)

文章目录 前言一、题目介绍二、解决方案三、优化总结 前言 在本篇文章中我们将会讲解二叉树中极为经典的题目236. 二叉树的最近公共祖先 一、题目介绍 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的…

如何借VR之手,让展厅互动更精彩?

VR虚拟现实技术以其卓越的沉浸式体验为特点,引领用户踏入一个全新的虚拟世界,正因如此,它开始被广泛应用于展厅、商业等多个领域。那么,今天,让我们就来了解一下这种技术是如何为展厅带来精彩互动体验的吧!…

日常使用工具(截图,笔记,一键启动)

目录 一,截图 Snipaste 二.笔记 Joplin 三.翻译 四.自动启动软件 这篇记录一下工作中用的很顺手的工具. 一,截图 Snipaste 官网:Snipaste - 截图 贴图 下面是官方手册. 使用 我都是直接F1 就会出现选择框,随意拖动大小,选择下方工具栏,相应位置, 二.笔记 Joplin 官网:…

el-table表格实现鼠标拖动而左右滑动

场景描述: 表格样式较为复杂,10条数据超出整个屏幕的高度,因而导致无法快速拖动滚动条,所以提出需要在表格内容区拖动鼠标,从而实现无需滚动到底部就可以左右拖动表格内容的效果。 具体实现: 实现的方式…

[排序算法]4. 图解堆排序及其代码实现

先来看看什么是堆? 堆是一种图的树形结构,被用于实现“优先队列”(priority queues) 注:优先队列是一种数据结构,可以自由添加数据,但取出数据时要从最小值开始按顺序取出。 在堆的树形结构中&#xff0c…

.NET 某和OA办公系统全局绕过漏洞分析

转自先知社区 作者:dot.Net安全矩阵 原文链接:.NET 某和OA办公系统全局绕过漏洞分析 - 先知社区 0x01 前言 某和OA协同办公管理系统C6软件共有20多个应用模块,160多个应用子模块,从功能型的协同办公平台上升到管理型协同管理平…

JS-06 原型式继承借用构造函数实现继承

目录 1 原型式继承 场景 前置问题 实现方法 2 借用构造函数实现继承 前置问题 错误的实现方式 正确的实现方式 1 原型式继承 场景 a、创建一个纯洁的对象:对象在控制台打印什么属性都没有 b、创建一个继承自某个父对象的子对象 前置问题 一个对象里有很…

基于稀疏辅助信号平滑的心电信号降噪方法(Matlab R2021B)

基于形态成分分析理论(MCA)的稀疏辅助信号分解方法是由信号的形态多样性来分解信号中添加性的混合信号成分,它最早被应用在图像处理领域,后来被引入到一维信号的处理中。 在基于MCA稀疏辅助的信号分析模型中,总变差方…

【前端篇】前端开发大厂面试真题

为助力小伙伴们梳理前端知识体系,从而能够充分地做好面试准备,那么今天就来给大家分享一份前端开发的面试真题与相关知识点,其中涵盖了最新版本的八股文(包含最新的 Vue 3 面试题)、高频算法题以及大佬的面经&#xff…

嵌入式进阶——EEPROM读写

🎬 秋野酱:《个人主页》 🔥 个人专栏:《Java专栏》《Python专栏》 ⛺️心若有所向往,何惧道阻且长 文章目录 设置EEPROM读写String字符串官方示例 EEPROM是一种可擦写可编程只读存储器(Electrically Erasable Programmable Read-…

[ARM-2D 专题] arm-2d项目简介

Arm-2D 是一个用于 Cortex-M 处理器上的 2.5D 图像处理的开源项目。 由ARM公司开发和维护,属于官方性质的项目,目前最新版本为V1.1.6. 2022年7月发布1.0的预览版, 2023年2月发布第一个正式版V1.1.1,近一年来快速迭代和功能增强&a…

数据库-SQL优化下

Group by 优化 limit优化 count优化 UPDATE优化 当用id去更改的时候,一个是id1 另一个id2 这是没毛病的,因为加的是行锁 但是如果根据name 一个是where nameaa. 另一个是namehh,在另一个事务没提交前,另一个不能提交,因为name字段不是索引…