wordpress添加视频的两个常用方法/网店seo关键词

wordpress添加视频的两个常用方法,网店seo关键词,纯 flash 网站,厦门 网站建设公司电话基于C#的以太网通讯实现:TcpClient异步通讯详解 在现代工业控制和物联网应用中,以太网通讯是一种常见的数据传输方式。本文将介绍如何使用C#实现基于TCP协议的以太网通讯,并通过异步编程提高通讯效率。我们将使用TcpClient类来实现客户端与服…

基于C#的以太网通讯实现:TcpClient异步通讯详解
在现代工业控制和物联网应用中,以太网通讯是一种常见的数据传输方式。本文将介绍如何使用C#实现基于TCP协议的以太网通讯,并通过异步编程提高通讯效率。我们将使用TcpClient类来实现客户端与服务器的连接、数据发送和接收,并详细讲解关键技术点。

1. 概述

以太网通讯基于TCP/IP协议,是一种可靠的、面向连接的通讯方式。在C#中,System.Net.Sockets.TcpClient类提供了对TCP协议的支持,可以方便地实现客户端与服务器之间的通讯。本文将使用异步编程模型(APM)来处理连接、发送和接收数据,以提高程序的响应性和性能。

2. 关键技术点

2.1 TcpClient类

TcpClient是C#中用于实现TCP客户端通讯的核心类。它封装了底层的Socket操作,提供了简单易用的接口。

2.2 数据缓冲区

在通讯过程中,数据通过字节数组(byte[])进行传输。合理设置缓冲区大小可以提高数据传输效率。

2.3 连接超时处理

在网络通讯中,连接超时是一个常见问题。通过设置超时时间,可以避免程序长时间等待无响应的服务器。

3. 代码实现

以下是基于TcpClient的异步通讯实现代码,关键技术点已标识。

3.1 TcpClientAsyncTool类

    public class TcpClientAsyncTool{TcpClient tcpClient;public bool isConnected = false;IPAddress iPAddress;int port;int connectTimeout;byte[] receiveBuffer = new byte[1024];public TcpClientAsyncTool(string ip, int port, int connectTimeout = 2000){tcpClient = new TcpClient();this.iPAddress = IPAddress.Parse(ip);this.port = port;this.connectTimeout = connectTimeout;}/// <summary>/// 连接服务器/// </summary>/// <param name="errorMsg"></param>/// <returns></returns>public bool Connect(Action connectDelegate, out string errorMsg){bool result = false;errorMsg = string.Empty;try{IAsyncResult asyncResult = tcpClient.BeginConnect(iPAddress, port, null, null);connectDelegate();bool success = asyncResult.AsyncWaitHandle.WaitOne(TimeSpan.FromMilliseconds(connectTimeout));//设置连接超时时间为2秒tcpClient.EndConnect(asyncResult);result = true;isConnected = result;}catch (Exception ex){errorMsg = ex.Message;}return result;}/// <summary>/// 断开连接/// </summary>/// <param name="errorMsg"></param>/// <returns></returns>public bool DisConnect(out string errorMsg){bool result = false;errorMsg = string.Empty;try{tcpClient.Close();isConnected = result;}catch (Exception ex){errorMsg = ex.Message;}return result;}/// <summary>/// 发送数据/// </summary>/// <param name="bytes"></param>/// <param name="errorMsg"></param>/// <returns></returns>public bool SendData(byte[] sendBytes, out string errorMsg){bool result = false;errorMsg = string.Empty;try{NetworkStream networkStream = tcpClient.GetStream();IAsyncResult asyncResult = networkStream.BeginWrite(sendBytes, 0, sendBytes.Length, null, null);networkStream.EndWrite(asyncResult);result = true;}catch (Exception ex){errorMsg = ex.Message + ex.StackTrace;}return result;}/// <summary>/// 接收数据/// </summary>/// <param name="result"></param>/// <param name="errorMsg"></param>/// <returns></returns>public byte[] ReceiveData(out bool result, out string errorMsg){result = false;errorMsg = string.Empty;byte[] readByteArray = null;try{NetworkStream networkStream = tcpClient.GetStream();IAsyncResult iAsyncResult = networkStream.BeginRead(receiveBuffer, 0, receiveBuffer.Length, null, null);int readBytes = networkStream.EndRead(iAsyncResult);readByteArray = new byte[readBytes];Array.Copy(receiveBuffer, readByteArray, readBytes);result = true;}catch (Exception ex){errorMsg = ex.Message + ex.StackTrace;}return readByteArray;}}

3.2 使用示例

以下是使用TcpClientAsyncTool类的示例代码,展示了如何连接服务器、发送和接收数据。

3.2.1 socket连接,端口号10010

    tcpClient1 = new TcpConnect.TcpClientAsyncTool(controlBoxWithID1.IP, 10010); // 初始化TcpClienttasks.Add(Task.Run(async () =>{if (tcpClient1.Connect(action, out errorMsg)) // 连接服务器{isConnected1 = true;await Task.Run(new Action(ReaceiveData)); // 启动数据接收任务}}));

3.2.2 数据接收

提前声明:TcpConnect.TcpClientAsyncTool tcpClient1; TcpClient客户端1

private void ReaceiveData()
{while (true){try{bool result = false;string errorMsg = string.Empty;byte[] readReadBytes = tcpClient1.ReceiveData(out result, out errorMsg); // 接收数据if (readReadBytes != null){//处理接收数据信息readReadBytes }}catch (Exception ex){Console.WriteLine($"Failed to connect to power supply: {ex.Message}"); // 捕获异常并输出错误信息}if (isConnected1 == false){break; // 如果连接断开,退出循环}}
}

3.2.2 数据发送

        public void SendData1(byte[] message){string errorMsg = string.Empty;if (isConnected1){tcpClient1.SendData(message, out errorMsg);}}

4. 关键技术解析

4.1 异步连接

通过BeginConnect和EndConnect方法实现异步连接,避免了主线程阻塞。使用AsyncWaitHandle.WaitOne设置超时时间,防止连接无响应的服务器。

4.2 异步发送和接收数据

使用BeginWrite/EndWrite和BeginRead/EndRead实现异步数据发送和接收,确保通讯过程不会阻塞主线程。

4.3 数据缓冲区

通过byte[]数组作为数据缓冲区,接收到的数据会被存储在该数组中。合理设置缓冲区大小可以提高数据传输效率。

4.4 连接状态管理
通过isConnected变量管理连接状态,确保在连接断开时及时停止数据接收任务。

5. 总结

本文介绍了如何使用C#实现基于TCP协议的以太网通讯,并通过异步编程模型提高了通讯效率。关键技术点包括TcpClient的使用、异步编程模型、数据缓冲区和连接超时处理。通过本文的代码示例,您可以快速实现一个可靠的以太网通讯客户端。

希望这篇文章对您有所帮助!如果有任何问题,欢迎在评论区留言讨论。

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

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

相关文章

小秋的矩阵

0小秋的矩阵 - 蓝桥云课 问题描述 给你一个 n 行 m 列只包含 0 和 1 的矩阵&#xff0c;求它的所有子矩阵中&#xff0c;是方阵而且恰好包含 k 个 0 的数量。 方阵是行数和列数相等的矩阵。 子矩阵是从一个矩阵当中选取某些行和某些列交叉位置所组成的新矩阵&#xff08;保…

晶晨S905L3芯片_原机安卓4升级安卓9.0_通刷线刷固件包

晶晨S905L3芯片_原机安卓4升级安卓9.0_通刷线刷固件包 线刷方法&#xff1a;&#xff08;新手参考借鉴一下&#xff09; 1、准备好一根双公头USB线刷刷机线&#xff0c;长度30-50CM长度最佳&#xff0c;同时准备一台电脑&#xff1b; 2、电脑上安装好刷机工具Amlogic USB Bu…

谷歌Chrome或微软Edge浏览器修改网页任意内容

在谷歌或微软浏览器按F12&#xff0c;打开开发者工具&#xff0c;切换到console选项卡&#xff1a; 在下面的输入行输入下面的命令回车&#xff1a; document.body.contentEditable"true"效果如下&#xff1a;

【生日蛋糕——DFS剪枝优化】

题目 分析 代码 #include <bits/stdc.h> using namespace std;const int N 24; const int inf 0x3f3f3f3f;int mins[N], minv[N]; int R[N], H[N]; int n, m, ans inf;void dfs(int u, int v, int s) {if(v minv[u] > n) return;if(s mins[u] > ans) return;…

短视频下载去水印,用什么工具好?

去除视频和图片水印是许多用户的需求&#xff0c;尤其是在分享或保存内容时。以下是6款超好用的工具&#xff0c;帮助你轻松去除水印&#xff0c;享受纯净的视觉体验&#xff1a; 1. 易下载去水印小程序 特点&#xff1a; 操作简单&#xff0c;支持抖音、快手、小红书、哔哩哔哩…

设计模式(行为型)-备忘录模式

目录 定义 类图 角色 角色详解 &#xff08;一&#xff09;发起人角色&#xff08;Originator&#xff09;​ &#xff08;二&#xff09;备忘录角色&#xff08;Memento&#xff09;​ &#xff08;三&#xff09;备忘录管理员角色&#xff08;Caretaker&#xff09;​…

【技术报告】谷歌开源多模态大模型 Gemma-3

【技术报告】谷歌开源多模态大模型 Gemma-3 1. Gemma-3 简介1.1 Gemma-3 的新功能1.2 与现有工作流的集成1.3 开始使用 Gemma-3 Gemma-3 技术报告&#xff1a;摘要Gemma-3 技术报告&#xff1a;1. 引言Gemma-3 技术报告&#xff1a;2. 模型架构2.1 视觉模态2.2 预训练2.3 量化感…

[ISP] 人眼中的颜色

相机是如何记录颜色的&#xff0c;又是如何被显示器还原的&#xff1f; 相机通过记录RGB数值然后显示器显示RGB数值来实现颜色的记录和呈现。道理是这么个道理&#xff0c;但实际上各厂家生产的相机对光的响应各不相同&#xff0c;并且不同厂家显示器对三原色的显示也天差地别&…

InfiniBand可靠连接(RC)模式:设计原理、核心机制与应用实践

引言 InfiniBand作为一种高性能网络互连技术&#xff0c;广泛应用于超算集群、分布式存储和金融交易系统等领域。其可靠连接&#xff08;Reliable Connection, RC&#xff09;模式以硬件级的有序性、可靠性和低延迟特性成为关键场景的首选。本文结合技术原理、机制对比和实际应…

【网络】Caddy 服务器如何提供 TLS(Transport Layer Security)(传输层安全协议)

这张图片介绍了 Caddy 服务器如何提供 TLS&#xff08;传输层安全协议&#xff09; 支持&#xff0c;确保通信的安全性。以下是对图片内容的详细分析 1. Caddy 是什么&#xff1f; Caddy 是一个现代化的 Web 服务器&#xff0c;以其简单易用和自动化的 HTTPS 支持而闻名。它内…

GHCTF web方向题解

upload?SSTI! import os import refrom flask import Flask, request, jsonify,render_template_string,send_from_directory, abort,redirect from werkzeug.utils import secure_filename import os from werkzeug.utils import secure_filenameapp Flask(__name__)# 配置…

《Python实战进阶》No21:数据存储:Redis 与 MongoDB 的使用场景

第21集&#xff1a;数据存储&#xff1a;Redis 与 MongoDB 的使用场景 摘要 在现代应用开发中&#xff0c;数据存储的选择直接影响系统的性能、扩展性和成本。Redis 和 MongoDB 是两种极具代表性的数据库技术&#xff0c;它们分别擅长解决不同场景下的问题。本文将深入探讨 Re…

mysql学习-常用sql语句

1、安装mysql参考网上链接&#xff0c;进入mysql数据库 mysql -u root -p 2、数据库操作 2.1、创建数据库 create database 数据库名 default character set utf8; 2.2、显示所有数据库 show databases; 2.3、选择数据库 use elementInfo; 2.4、删除数据库 drop database…

(全)2024下半年真题 系统架构设计师 综合知识 答案解析01

系统架构设计师第二版教程VIP课程https://edu.csdn.net/course/detail/40283 操作系统 下列选项中不能作为预防死锁措施的是 。 A. 破坏“循环等待"条件 B. 破坏“不可抢占”条件 C. 破坏“互斥”条件 D. 破坏“请求和保持”条件 答案&#xff1a;C 解析&…

LeetCode算法心得——零数组变换IV(0-1背包)

大家好&#xff0c;我是晴天学长&#xff0c;很久很久没有写算法题解了&#xff0c;今天开始转python了。&#x1f4aa;&#x1f4aa;&#x1f4aa; 1&#xff09;统计打字方案数 给你一个长度为 n 的整数数组 nums 和一个二维数组 queries &#xff0c;其中 queries[i] [li, …

HTB 学习笔记 【中/英】《前端 vs. 后端》P3

&#x1f4cc; 这篇文章讲了什么&#xff1f; 介绍了 前端&#xff08;客户端&#xff09; 和 后端&#xff08;服务器端&#xff09; 的区别。解释了 全栈开发&#xff08;Full Stack Development&#xff09;&#xff0c;即前端后端开发。介绍了 前端和后端常用的技术。讨论…

Day 64 卡玛笔记

这是基于代码随想录的每日打卡 参加科学大会&#xff08;第六期模拟笔试&#xff09; 题目描述 ​ 小明是一位科学家&#xff0c;他需要参加一场重要的国际科学大会&#xff0c;以展示自己的最新研究成果。 ​ 小明的起点是第一个车站&#xff0c;终点是最后一个车站。然…

《C语言中\0:字符串的神秘“终结者”》

&#x1f680;个人主页&#xff1a;BabyZZの秘密日记 &#x1f4d6;收入专栏&#xff1a;C语言 &#x1f30d;文章目入 引言一、字符串的定义与存储二、\0&#xff1a;字符串的终结标志三、\0在字符串操作中的作用四、\0的陷阱与注意事项五、\0与字符串的动态分配六、总结 引言…

TCP/IP协议中三次握手(Three-way Handshake)与四次挥手(Four-way Wave)

TCP/IP协议中三次握手&#xff08;Three-way Handshake&#xff09;与四次挥手&#xff08;Four-way Wave&#xff09; 一、TCP三次握手&#xff08;Three-way Handshake&#xff09;二、TCP四次挥手&#xff08;Four-way Wave&#xff09;三、常见问题解答总结为什么三次握手不…

网页制作16-Javascipt时间特效の设置D-DAY倒计时

01、效果图 02、应用 new Date()//返回今天日期 new Date("April 1,2025")//返回目标日期 document.write()//文档显示 getTime()返回当日毫秒数 Math.floor(amadays / (1000 * 60 * 60 * 24)//把毫秒换算天 03、代码 <!doctype html> <html> &…