简单的TCPSocket客户端使用案例(已入OPCommon)

embedded/2024/11/29 21:49:06/

做一个实体操作工具类(包含)

public delegate void TcpClientReceivedEventHandler(TcpClientStateEventArgs args);public  class TCPSocketClient{ //接收委托public event TcpClientReceivedEventHandler TcpReceived;private CancellationTokenSource cts = new CancellationTokenSource();//public string _ip { get; set; }//public int _port { get; set; }//Socket socket = null;//Thread thread = null;public bool IsConnect = false;//控制回复/// <summary>/// /// </summary>/// <param name="ip"></param>/// <param name="port"></param>public TCPSocketClient(string ip, int port){_ip = ip;_port = port;}/// <summary>/// 打开链接/// </summary>public void Open(){socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);IPEndPoint endPoint = new IPEndPoint(IPAddress.Parse(_ip), _port);socket.Connect(endPoint);thread = new Thread(Receiver);thread.IsBackground = true;thread.Start();}/// <summary>/// 获取数据操作/// </summary>private void Receiver(){while (!cts.IsCancellationRequested){byte[] buffer = new byte[1024 * 1024];int length = socket.Receive(buffer);if (length > 0){byte[] b = new byte[length];Buffer.BlockCopy(buffer, 0, b, 0, length);TcpClientStateEventArgs args = new TcpClientStateEventArgs();args.buffer = b;TcpReceived.Invoke(args);}}}/// <summary>/// 发送bytes/// </summary>/// <param name="data"></param>public void Send(byte[] data){if (socket!=null ){socket.Send(data);}}/// <summary>/// 关闭当前链接/// </summary>public void Close(){IsConnect = false;if (socket!=null ){socket.Close();} thread.Abort();socket = null;thread = null;}}/// <summary>/// Tcp状态事件参数类/// </summary>public class TcpClientStateEventArgs : EventArgs{public byte[] buffer = null;}

然后简单的使用方法就是

  TCPSocketClient tcpClient = null;/// <summary>/// 其他测试/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void button2_Click(object sender, EventArgs e){if (BTSocket.Text.Equals("链接Socket")){BTSocket.Text = "断开";string ip = TBSocketIp.Text.Trim();int port = int.Parse(TBPort.Text.Trim());tcpClient = new TCPSocketClient(ip, port);tcpClient.Open();tcpClient.TcpReceived += TcpClient_TcpReceived;}else{BTSocket.Text = "链接Socket";tcpClient.Close();}}/// <summary>/// 接受数据/// </summary>/// <param name="args"></param>private void TcpClient_TcpReceived( TcpClientStateEventArgs args){string str = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:fff") + ":";str += Encoding.UTF8.GetString(args.buffer);this.Invoke(new Action(() =>{LBRemark.Text = str;}));}/// <summary>/// 发送/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void button2_Click_1(object sender, EventArgs e){byte[] Bytes = OPCommon.ConvertType.HexStringToByteArray(TBSend.Text);tcpClient.Send(Bytes);}

http://www.ppmy.cn/embedded/141582.html

相关文章

Java设计模式 —— 【创建型模式】工厂模式(简单工厂、工厂方法模式、抽象工厂)详解

文章目录 前言一、简单工厂&#xff08;静态工厂&#xff09;1、概述2、代码实现3、优缺点 二、工厂方法模式1、概述2、代码实现3、优缺点 三、抽象工厂模式1、概述2、代码实现3、优缺点 四、总结 前言 先看个案例&#xff1a;【手机和手机店】在没有工厂的时候&#xff0c;手…

小游戏聚合SDK的工具类封装

文章目录 前言工具类单例日志打印输入框的封装前言 之前的文章写了如何开发小游戏聚合SDK,既然是聚合SDK,工具类的封装也比较重要,做好基础搭建后续在接入其他渠道的时候能大大减少工作量。 工具类 单例 初始化的配置信息,比如应用ID 、渠道ID等需要全局使用,而且初始…

Leetcode 将有序数组转换为二叉搜索树

算法思想及代码解析&#xff1a; 这段代码的目的是将一个有序数组转换为 高度平衡的二叉搜索树&#xff08;Balanced Binary Search Tree, BST&#xff09;。以下是算法的详细解释&#xff1a; 1. 什么是高度平衡的二叉搜索树&#xff1f; 二叉搜索树&#xff1a;对于树中的每…

Web 端语音对话 AI 示例:使用 Whisper 和 llama.cpp 构建语音聊天机器人

大语言模型&#xff08;LLM&#xff09;为基于文本的对话提供了强大的能力。那么&#xff0c;能否进一步扩展&#xff0c;将其转化为语音对话的形式呢&#xff1f;本文将展示如何使用 Whisper 语音识别和 llama.cpp 构建一个 Web 端语音聊天机器人。 系统概览 如上图所示&…

selinux和防火墙实验

1 、 selinux 的说明 SELinux 是 Security-Enhanced Linux 的缩写&#xff0c;意思是安全强化的 linux 。 SELinux 主要由美国国家安全局&#xff08; NSA &#xff09;开发&#xff0c;当初开发的目的是为了避免资源的误用。 系统资源都是通过程序进行访问的&#xff0c;如…

Android.mk的变量有哪些

Android.mk 文件是 Android 构建系统中用于定义模块和依赖关系的 Makefile 文件。它使用一系列变量来指定源文件、库、编译选项等。以下是一些常用的 Android.mk 变量及其用途&#xff1a; 常用变量 模块名称 LOCAL_MODULE: 模块的名称&#xff0c;必须唯一。 LOCAL_MODULE : …

基于Matlab的图像去噪算法仿真

中值滤波的仿真 本节选用中值滤波法对含有高斯噪声和椒盐噪声的图像进行去噪&#xff0c;并用Matlab软件仿真。 &#xff08;1&#xff09;给图像加入均值为0&#xff0c;方差为0.02的高斯噪声&#xff0c;分别选择33模板、55模板和77模板进行去噪 Matlab部分代码&#xff1…

AI 编译器学习笔记之十三 -- Pytorch 特性实现

1、实现torch中的平铺特性 tile 的代码实现&#xff1a;Add support for aten.tile operator(not e2e support) by georgeuser Pull Request #2246 llvm/torch-mlir (github.com) torch.tile — PyTorch 2.5 documentation