C#编程——基于TCP的套接字通信包【开源】

提示:如果这篇文章对您有帮助,欢迎点赞支持。

前言

基于TCP的套接字通信是深入学习C#程序的必备技能之一,套接字不仅可以用于网络编程,在本地不同进程之间的通信不同编程语言的程序通信中也应用十分广泛。

本篇文章是在之前了解套接字编程接口的基础上进一步扩展,写出一套真正可用于实际程序通信的代码,其通过自定义通信协议,可以处理分包和粘包问题

分包和粘包问题的由来以及自定义通信协议的方法,我已经在我的另一篇博客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
GitHubhttps://github.com/MagicDeveloperDRL/MNetSocket-CSharp
参考博客https://blog.csdn.net/yannanxiu/a
  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

魔法攻城狮MRL

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值