- 博客(67)
- 收藏
- 关注
原创 服务器与客户端通讯测试
通过上面4种测试方式,我们发现在TCP通讯中无论客户端如何发送数据,服务器都是能够接受到数据的,那么我们就可以理解这句话:TCP协议(Transimission Control Protocol)是以一种面向连接的、可靠的、基于字节流的传输层通信协议。
2025-03-28 16:12:09
771
原创 C#TCP通讯封装服务器工具类
方式2:调用:public Action<EMessage, IPEndPoint, int, string> AddEventToOutLog。方式2:调用:public EventHandler<byte[]> AddEventToDataReceived。方式:设置属性【OutputReceivedLog 】、设置属性【OutputReplyLog】ASCII:ASCII-解析输出。方式1:通过有参构造函数添加。方式1:通过有参构造函数添加。UTF8:UTF8-解析输出。
2025-03-28 14:53:49
506
原创 C#TCP通讯封装客户端工具类
方式2:调用:public Action<EMessage, IPEndPoint, int, string> AddEventToOutLog。方式2:调用:public EventHandler<byte[]> AddEventToDataReceived。连接服务器:bool ConnectServer(string ip, int port)private set;ASCII:ASCII-解析输出。方式1:通过有参构造函数添加。方式1:通过有参构造函数添加。UTF8:UTF8-解析输出。
2025-03-26 18:01:29
406
原创 C#winform实现气泡碰撞电脑桌面边缘(碰撞后改变气泡颜色,支持添加气泡)
【代码】C#winform实现气泡碰撞电脑桌面边缘(碰撞后改变气泡颜色)
2025-03-20 18:32:15
262
原创 TCP三次握手
SYN是 TCP 协议中用于发起连接请求的控制位。当客户端想要与服务器建立 TCP 连接时,会发送一个带有SYN标志位设置为 1 的数据包给服务器,这个数据包就被称为SYN包。该包的主要目的是同步客户端和服务器之间的初始序列号(Initial Sequence Number,ISN),以便后续的数据传输能够有序进行。数据包内容源端口和目的端口:客户端随机选择一个源端口,而目的端口是服务器正在监听的端口.初始序列号(ISN):客户端会随机生成一个初始序列号,这个序列号用于标识该连接中第一个字节的序号。
2025-03-20 15:15:04
663
原创 C#winform将引用的DLL嵌入exe
在软件开发的过程中不可避免需要引用第三方类库或自定义类库(DLL), 引用的DLL一般在生成项目时会拷贝至Debug或Release目录中, 造成生成目录中文件繁多的问题,鉴于此现象希望将DLL封装在项目的exe文件中。
2024-12-20 15:43:05
756
原创 C#通过NPOI 读、写Excel数据;合并单元格、简单样式修改;通过读取已有的Excel模板另存为文件
【代码】C#通过NPOI 读、写Excel数据;合并单元格、简单样式修改;通过读取已有的Excel模板另存为文件。
2023-11-28 16:38:12
1785
原创 C#多线程的操作
在软件开发的过程中会很频繁的用到线程(Thread),在线程使用的过程中总是能出现“这样”或者“那样”的问题。线程被定义为程序的执行路径。如果应用程序涉及到复杂的和耗时的操作,设置不同的线程执行路径往往是有益的,让每个线程执行特定的工作。其实Task 是基于 Thread 的,是比较高层级的封装,Task 最终还是需要 Thread 来执行,使用Thread 开启的线程默认使用前台线程,而Task 默认使用后台线程。不管是前台线程还是后台线程,如果线程内出现了异常,都会导致进程的终止。
2023-11-15 17:07:42
814
原创 C#线程使用
1.异步委托开启线程注意:1.若使用异步委托开启线程,则委托仅允许添加一个方法;2.启用委托开启线程,可以多次启用线程,相当于再次启用另一条线程;/// <summary>/// 定义委托类型/// </summary>public static Action<string, int> Test;/// <summary>/// 启动异步委托线程/// </summary>/// <param name="name"&
2022-02-25 16:16:25
891
原创 C#文本框验证当前按键或验证输入内容
1 核心代码(校验当前字符是否为数字或退格键)public class Utility{ /// <summary> /// 判断按键是否为数字或退格键 /// </summary> /// <param name="ch">按键字符</param> /// <returns>是:true</returns> public static bool IsInputNumber(char ch) { return
2022-02-21 15:26:50
2048
原创 C#关于Func和Action委托的介绍
委托:委托(Delegate) 是存有对某个方法的引用的一种引用类型变量。引用可在运行时被改变。委托(Delegate)特别用于实现事件和回调方法。所有的委托(Delegate)都派生自 System.Delegate 类。1.Action委托没有返回值,可以不包含参数(1)声明委托、定位委托事件、向委托添加事件、执行委托/// <summary>/// 不包含参数/// </summary>private event Action Action_0;/// <
2022-02-16 11:59:06
5096
原创 C#关于JSON的使用
(2)大量数据时尽量少用Json存储数据,Json适用于轻量级数据;(1)一般情况不使用加密,若要使用加密请进行验证以免出现错误;(3)使用Json时需要添加依赖包,并引进命名空间;从包管理器添加Json依赖包,
2022-02-16 10:45:51
4308
1
原创 关于C#winform端Settings.settings的见解
1.说明由于最近工作比较忙很长时间没有写文章了,最近在项目中使用Settings.settings时遇见了一些问题,故作记录,要是有不对的希望各位大神指点。2.Settings.settings说明Settings.settings结构如上图,在Settings.settings中添加节点时Settings.Designer.cs自动生成该节点的属性,App.config自动生成节点信息。3.使用方式介绍private void button1_Click(object sender, E
2021-12-09 12:06:56
4078
原创 C#TextBox设置提示文本(SetHintText)
效果展示核心代码[DllImport("user32.dll", CharSet = CharSet.Auto)]private static extern Int32 SendMessage(IntPtr hWnd, int msg, int wParam, [MarshalAs(UnmanagedType.LPWStr)] string lParam);public static void SetHintText(Control control, string text){ Sen
2021-10-20 10:38:54
4852
原创 C#已知两点(线段),求互相垂直平分两点(线段)。
/// <summary> /// 根据两点求直线以及直线垂直平分线的k,b值, /// </summary> /// <param name="x1">传递值为已知坐标点x1,返回值为垂直平分线的x1</param> /// <param name="x2">传递值为已知坐标点x2,返回值为垂直平分线的x2</param> /// <param na
2021-09-11 11:39:51
1236
原创 C#在控件中绘制矩形、圆、线段等(切换不同的图片,自定义翻页控件,通过委托监控某个字段)
1.效果展示代码 /// <summary> /// 记录鼠标移动时的位置 /// </summary> private Point _mouseLocation; //鼠标移动事件 private void pic_1_MouseMove(object sender, MouseEventArgs e) { _mouseLocation =
2021-09-09 18:23:35
2279
1
原创 C#winform设置组合快捷键
1.设置窗体属性:keyPreview = true;2注册事件3.在事件中添加代码 private void Form1_KeyDown(object sender, KeyEventArgs e) { if (e.Control && e.Alt && e.KeyCode == Keys.S) //Ctrl + Alt + S { MessageBox.Show("按下了Control + Alt + S");
2021-08-13 11:32:15
1033
原创 C#winform程序防多开,以及限定指定PC打开程序
1.限制只能打开一个程序var processes = Process.GetProcesses();var currentProcess = Process.GetCurrentProcess();var isRun = false;foreach (var p in processes){ if (p.ProcessName == currentProcess.ProcessName && p.Id != currentProcess.Id) {
2021-06-10 11:21:42
478
原创 C#重绘GroupBox,使文本居中显示
using System.ComponentModel;using System.Drawing;using System.Windows.Forms;namespace MyNameSpace{ public class M_GroupBox : GroupBox { private string _text = ""; /// <summary> /// 构造函数 /// </summary&
2021-05-08 16:31:26
1448
原创 C#条件拼接Expression<Func<T, bool>>
使用代码特别注意拼接条件时,所使用到的条件strID,strBir必须是独立的var predicate = PredicateBuilder.GetTrue<Student>();predicate = predicate.And(it => it.id.ToString().Contains(strID));predicate = predicate.And(it => it.Birthday.ToString().Contains(strBir));predicat
2021-04-22 16:58:52
5027
原创 C#winform跨窗体更新UI,跨线程更新UI
1. 跨线程界面更新1.1通过委托更新界面public delegate void RefreshInterface(int num);//创建委托,含有一个参数numbool MyThreadIsRun = false;//用来控制线程状态private Thread MyThread = null; //创建线程private void button1_Click(object sender, EventArgs e){ MyThreadIsRun = !MyThreadIsRun
2021-04-21 13:46:59
8991
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人