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.30.91";
            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}");
        }
    }
}

end

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

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

相关文章

OpenHarmony Liteos_A内核之iperf3移植心得

一、iperf3工作原理 iperf3主要的功能是测试基于特定路径的带宽,在客户端和服务器端建立连接(三次握手)后,客户端发送一定大小的数据报并记下发送的时间,或者客户端在一定的时间内发送数据并记下发送的总数据。带宽的…

MySQL--二进制日志

目录 一、作用 二、binlog配置 1.查看当前配置 2.修改配置文件​ 3.binlog配置参数解释 三、binlog记录内容说明 1.记录内容 2.DDL、DCL记录格式 3.DML记录格式 4.记录内容查看 四、bin_log_format 记录模式 1.行模式 Row 2.语句模式 Statement 3.混合模式 五、…

使用Django实现WebSocket

文章目录 安装依赖编写Consumer配置路由在模板中使用WebSocket运行应用 WebSocket是一种在单个TCP连接上进行全双工通信的协议,在Web开发中被广泛应用于实时通信和数据推送。本文将介绍如何在Django中使用WebSocket来实现实时通信功能。 安装依赖 首先&#xff0…

【Matlab函数分析】绘图函数:mesh网格曲面图

🔗 运行环境:Matlab 🚩 撰写作者:左手の明天 🥇 精选专栏:《python》 🔥 推荐专栏:《算法研究》 #### 防伪水印——左手の明天 #### 💗 大家好🤗&#x1f91…

基于Spring Boot的高校图书馆管理系统

项目和论文都有企鹅号2583550535 基于Spring Boot的图书馆管理系统||图书管理系统_哔哩哔哩_bilibili 第1章 绪论... 1 1.1 研究背景和意义... 1 1.2 国内外研究现状... 1 第2章 相关技术概述... 2 2.1 后端开发技术... 2 2.1.1 SpringBoot 2 2.1.2 MySQL.. 2 2.1.3 My…

FTP协议——BFTPD基本操作(Ubuntu+Win)

1、描述 本机(Win10)与虚拟机(Ubuntu22.04.4)上的BFTPD服务器建立FTP连接,执行一些基本操作。BFTPD安装教程:FTP协议——BFTPD安装(Linux)-CSDN博客 2、 步骤 启动BFTPD。启动文件…

Spring MVC 工作流程源码分析

前言: 我们知道 Spring MVC 的核心是前端控制器 DispatcherServlet,客户端所有的请求都会交给 DispatcherServlet 来处理,本篇我我们来分析 Spring MVC 处理客户端请求的流程,也就是工作流程。 Sping MVC 只是储备传送门&#x…

Talken - 语音命令系统

Talken - 语音命令系统 通过集成最先进的语音命令系统 Talken,释放游戏的全部潜力。 借助 Talken,您可以让玩家通过语音命令控制动作,从而重新定义游戏体验。 观看角色移动并对语音指令做出实时反应,模糊游戏与现实之间的界限。 主要特征: 🗣️ 语音驱动的游戏玩法:…

浙江大学数据结构MOOC-课后习题-第九讲-排序2 Insert or Merge

题目汇总 浙江大学数据结构MOOC-课后习题-拼题A-代码分享-2024 题目描述 测试点 思路分析 刚开始我打算想推出一个规律,来判断是否是归并排序,但实在太过于复杂,我很难去想出这样的规律…因此,参考了其他博主的思路——每做一次排…

7 步解决Android Studio模拟器切换中文输入

详细步骤传送地址:Android Studio 模拟器切换中文输入 目录 01 问题概述 02 模拟器的调试 01 问题概述 大家在使用Android Studio 软件进行项目演示时总会遇到一些输入框需要输入中文汉字的情况,由于AS自带的模拟器基本都是英文,这时就有同…

服务器主机托管一站式托管服务有哪些?

服务器主机托管一站式托管服务,作为现代企业信息化建设的重要一环,为企业提供了一种高效、安全、可靠的服务器运行环境。下面,我们将从多个方面详细介绍这一服务的内容。 一、硬件与基础设施 服务器主机托管服务首先涵盖了服务器硬件和网络基…

Vulhub——CAS 4.1、AppWeb、apisix

文章目录 一、Apereo CAS 4.1(反序列化命令执行漏洞)二、CVE-2018-8715(AppWeb认证绕过漏洞)三、apisix3.1 CVE-2020-13945(默认密钥漏洞)3.2 CVE-2021-45232(Dashboard API权限绕过导致RCE) 一…

vue3 手动简单 24h 甘特图封装

甘特图 手动封装简版甘特图,纯展示功能,无其他操作 文章目录 甘特图前言效果图组件使用总结 前言 开始的思路是使用echarts 瀑布图来体现,但是试验后发现,头部时间功能不满足,然未找到其他组件,于是手动封…

厨师服穿戴智能监测摄像机

随着科技的发展,智能监测摄像技术已经在各个领域得到了广泛应用。近年来,厨师服穿戴智能监测摄像机逐渐成为了厨房管理和食品安全监控的重要工具。这种设备能够为厨师提供实时监测和反馈,提高工作效率和食品安全,进一步提高整个餐…

网上书城|基于SprinBoot+vue的网上书城管理系统(源码+数据库+文档)

网上书城管理系统 目录 基于SprinBootvue的网上书城管理系统 一、前言 二、系统设计 三、系统功能设计 1系统功能模块 2管理员功能模块 3用户后台功能模块 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取: 博主介…

贵州大学24计算机考研数据速览,国家重点实验室22408复试线285分!贵州大学计算机考研考情分析!

贵州大学计算机科学与技术学院坐落在贵州大学北校区(贵阳花溪)。 学院现有教职工139人,其中专职教师126人,教授17人,副教授37人,讲师46人,高级实验师4人,实验师17人。具有博士学位的…

部署LAMP环境

红帽9搭建LAMP 安装Apache 2.安装数据库服务 3.安装php (1)使用IP访问/phpinfo.php 4.安装phpMyAdmin (1)数据库端口改为学号后五位 (2)登录phpmyadmin 5.SSH增加一个端口10022,fttp增加两个端口10080和8080 &#xf…

如何利用云平台上更好地规划安全生产教育与培训

在平台上进行安全教育和培训,可以采取以下步骤和策略,以确保教育的有效性和参与度: 一、明确教育目标和培训内容 确定教育目标:明确希望员工通过培训达到的安全意识和技能水平。 制定培训内容:根据行业特点、岗位需求…

科学技术创新杂志科学技术创新杂志社科学技术创新编辑部2024年第10期目录

科技创新 单桩穿越岩溶发育地层力学特征与溶洞处置措施研究 刘飞; 1-7《科学技术创新》投稿:cnqikantg126.com 基于多目标优化的中低压配电网电力规划研究 向星山;杨承俊;张寒月; 8-11 激光雷达测绘技术在工程测绘中的应用研究 张军伟;闫宏昌; 12-15 …

大语言模型的创意“魔法“:召唤隐藏的联想思维

随着人工智能的迅猛发展,大语言模型正在掀起一场"创意风暴"。这些强大的AI模型不仅能够生成栩栩如生的文本,还展现出惊人的创造力。但你是否好奇,它们的创意究竟来自何处? 最新研究表明,大语言模型的创意之源在于激活…