C#编程——基于TCP的套接字通信包【开源】
2021/4/8 22:55:23
本文主要是介绍C#编程——基于TCP的套接字通信包【开源】,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
提示:如果这篇文章对您有帮助,欢迎点赞支持。
文章目录
前言
一、本项目组成部分
1、项目目录结构
2、项目代码功能
3、项目主要特色
4、代码不足与改进措施
二、本项目测试效果
三、本项目开源信息
前言
基于TCP的套接字通信是深入学习Python程序的必备技能之一,套接字不仅可以用于网络编程,在本地不同进程之间的通信、不同编程语言的程序通信中也应用十分广泛。
本篇文章是在之前了解套接字编程接口的基础上进一步扩展,写出一套真正可用于实际程序通信的代码,其通过自定义通信协议,可以处理分包和粘包问题。
分包和粘包问题的由来以及自定义通信协议的方法,我已经在我的另一篇博客Python编程——基于TCP的套接字通信包【开源】中说明了。
本篇文章是博客Python编程——基于TCP的套接字通信包【开源】代码的C#版本,所以不会再次讲解原理部分,而是用于介绍开源内容和效果演示。本篇文章的代码将会在GitHub上开源。
一、本项目组成部分
1、项目目录结构
在unity环境下第三方动态库直接放入工程目录即可,这个并不难:
2、项目代码功能
本项目共有6个C#文件,并没有unity的编译文件,测试代码只需要挂在unity中的一个对象上运行即可。
模块 | 脚本名称 | 主要功能 |
核心 | MsgProtol.cs | 提供服务端和客户端的通信协议 |
ServerSocket.cs | 提供服务端TCP套接字通信功能的接口 | |
ClientSocket.cs | 提供客户端TCP套接字通信功能的接口 | |
测试 | TestServer.cs | 基于Unity环境测试ServerSocket提供的接口 |
TestClient.cs | 基于Unity环境测试ClientSocket提供的接口 | |
工具 | DebugHelper.cs | 基于Unity环境的日志调试工具,提供自定义颜色功能 |
3、项目主要特色
(1)本项目提供了一个自定义通信协议类MsgProtol,该类封装了C#语言的打包和解包方法,可以解决分包和粘包问题,也可以根据自己需求更改消息头设置,原来参考Python编程——基于TCP的套接字通信包【开源】。
(2)本项目提供了不局限于unity环境的C#的套接字封装类,测试代码基于Unity环境,用户也可以经过简单修改使其适用于其他C#开发环境。
(3)本项目借助Json格式编码不仅可以传输字符串信息,也实现实现了类对象的参数化传输,例如:
(4)本项目的注释和封装都较好,还有对应的博客讲解,是基于TCP的套接字开发的较好学习材料。
4、代码不足与改进措施
由于这只是作者的一个小型演示项目,并没有进行更多完善,必然存在一些不足,作者目前已经发现的一些可扩展的地方如下:
(1)本项目的自定义通信协议类MsgProtol不支持包含中文字符的消息打包和解包,这主要是因为json解码时无法解码包含中文字符,如果读者找到了较好的解决方案,欢迎留言共同学习。
(2)本项目提供了服务端的广播功能演示,并没有开发针对特定客户端的发送和接收的API接口,但是这也不困难,我这里简单说下其中一种简单的实现思路:
(1)在通信协议的消息头部分(源码中是3个数字部分)中新增一个数字来记录消息发送方的身份ID(可以自己设计,最简单是随机码)
(2)服务端接收到客户端连接时第一次接收到信息记录下身份ID,根据不同身份ID就可针对不同客户端发送消息。
(3)本文没有使用多线程来处理客户端的消息接收,这个处理起来其实也并不困难。
(4)本文没有测试多个客户端连接的效果,因为作者的项目中暂时不需要,要想进一步升级也并不困难。
综合来讲,本项目无法代替大型专业的TCP通信包,在大型项目中可能功能有限,但是由于其代码便于理解,适合帮助开发者学习如何构建自己的个性化需求的TCP通信包。
二、本项目测试效果
本项目的测试代码是基于Unity环境编写的,如果不想使用Unity环境的测试代码,可以仿照测试代码中的接口调用写其他环境下的测试代码,相信这对有编程基础的同学不是问题。
本项目的源码为了更轻量,不会包含Unity编译文件,如果想要演示测试效果,只需要将测试代码挂在一个物体上即可,相信这对有Unity基础的同学不是问题:
最终的演示效果如下:
左侧四个按钮分别展示了服务端的启动、广播消息、断开所有客户端、关闭的四个功能。
右侧四个按钮分别展示了客户端的启动、发送消息、发送消息接收回复、关闭的四个功能。
最后以日志输出效果,如下:
其中绿色日志是服务端输出的关键日志,白色大多是客户端输出的关键日志。
三、本项目开源信息
本项目在GitHub上开源,如果您觉得本项目对您有帮助,欢迎点赞支持,以上是项目的一些开源信息:
MNetSocket-CSharp | 基于C#的网络通信包 |
---|---|
开发者 | MRL Liu |
编程语言 | C# |
项目描述 | 基于TCP的套接字通信包,可以自定义通信协议,处理分包和粘包 |
对应博客 | https://blog.csdn.net/qq_41959920/article/details/115380403 |
https://blog.csdn.net/qq_41959920/article/details/115529675 | |
GitHub | https://github.com/MagicDeveloperDRL/MNetSocket-CSharp |
参考博客 | https://blog.csdn.net/yannanxiu/a |
这篇关于C#编程——基于TCP的套接字通信包【开源】的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2022-03-01沐雪多租宝商城源码从.NetCore3.1升级到.Net6的步骤
- 2024-11-18微软研究:RAG系统的四个层次提升理解与回答能力
- 2024-11-15C#中怎么从PEM格式的证书中提取公钥?-icode9专业技术文章分享
- 2024-11-14云架构设计——如何用diagrams.net绘制专业的AWS架构图?
- 2024-05-08首个适配Visual Studio平台的国产智能编程助手CodeGeeX正式上线!C#程序员必备效率神器!
- 2024-03-30C#设计模式之十六迭代器模式(Iterator Pattern)【行为型】
- 2024-03-29c# datetime tryparse
- 2024-02-21list find index c#
- 2024-01-24convert toint32 c#
- 2024-01-24Advanced .Net Debugging 1:你必须知道的调试工具