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

互联网 2021/4/8 22:55:23

提示:如果这篇文章对您有帮助,欢迎点赞支持。文章目录 前言 一、本项目组成部分1、项目目录结构 2、项目代码功能 3、项目主要特色 4、代码不足与改进措施 二、本项目测试效果 三、本项目开源信息前言 基于TCP的套接字通信是深入学习Python程序的必备技能之一,套接字不…

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

文章目录

前言

一、本项目组成部分

 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
GitHubhttps://github.com/MagicDeveloperDRL/MNetSocket-CSharp
参考博客https://blog.csdn.net/yannanxiu/a
随时随地学软件编程-关注百度小程序和微信小程序
关于找一找教程网

本站文章仅代表作者观点,不代表本站立场,所有文章非营利性免费分享。
本站提供了软件编程、网站开发技术、服务器运维、人工智能等等IT技术文章,希望广大程序员努力学习,让我们用科技改变世界。
[C#编程——基于TCP的套接字通信包【开源】]http://www.zyiz.net/tech/detail-154072.html

上一篇:ASP.NET jQuery attr()和prop()方法应用举例---实现选择与交换

下一篇:C# 操作 Mongodb

赞(0)

共有 条评论 网友评论

验证码: 看不清楚?
    关注微信小程序
    程序员编程王-随时随地学编程

    扫描二维码或查找【程序员编程王】

    可以随时随地学编程啦!

    技术文章导航 更多>
    扫一扫关注最新编程教程