C# 高并发、高性能TCP框架,可跨平台处理
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C# 高并发、高性能TCP框架,可跨平台处理,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含5729字,纯文字阅读大概需要9分钟。
内容图文
![C# 高并发、高性能TCP框架,可跨平台处理](/upload/InfoBanner/zyjiaocheng/619/48fb26197eec44eebd3742cddfed022a.jpg)
说起TCP大家肯定都不陌生,传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793 定义。
TCP旨在适应支持多网络应用的分层协议层次结构。 连接到不同但互连的计算机通信网络的主计算机中的成对进程之间依靠TCP提供可靠的通信服务。TCP假设它可以从较低级别的协议获得简单的,可能不可靠的数据报服务。 原则上,TCP应该能够在从硬线连接到分组交换或电路交换网络的各种通信系统之上操作。
那么
对于C#又应该怎么使用TCP呢,实际上微软已经设置了TCP协议的抽象模型类,也就是大家熟知的Socket,以及更高级的TcpClient等,诸如此类的使用,这里也不做多解释。但是对于高并发,高性能等问题,这些偏底层的类就没有一个好的开发,所以这也是我自己开发RRQMSocket
的初衷,希望这个程序集能给你带来惊喜。
所需工具:
- VS2017及以上版本
- Internet网络
- 电脑一台
- 人
- 还有必不可少的程序集。RRQMSocket.dll(后面介绍下载和引用)
开始
准备好了以上工具,我们就开始吧!
首先我们先来介绍一下该程序集的一些功能
1.TCP框架自然是在TCP协议之上的,所以无论是使用环境还是是性能都是无可挑剔的。
2. 服务器与客户端均采用多线程,从而可以大大增加了数据处理能力,实现高并发。
3. 可以直接发送或接收TCP普通报文,也可以按预制方法发送和接收不粘包的TCP报文。
4. 可以长连接进行数据交换,也可以进行短连接
5. 适用框架版本:net45、netcoreapp2.0、netstandard2.0
程序集引用及Demo下载
1.引用
在VS里面的NuGet程序包功能里面,联网的情况下搜索“RRQMSocket”,如果版本较低或者是破解版的话,就去Nuget官方网站自行下载,然后解压自行引用。
2.Demo下载
在Nuget的介绍界面,有项目Url,点击就可以下载。也可以点击此处下载直接下载。
命名空间及工具类介绍
1.命名空间:
程序集中基本类
的命名空间为“RRQMSocket”
2.工具类介绍
- RRQMSocket.TcpService:这是所有基于TCP协议的服务器抽象基类,主要用于创建服务端,触发事件,管理已连接的客户端等。
- RRQMSocket.TcpClient:这是客户端的主类,主要用于创建客户端,触发事件,处理客户端数据等。
- RRQMSocket.TcpSocketClient:服务器辅助类,该类是客户端在成功连接服务器后,在服务器端创建的对象类,一般的,触发服务器事件的sender的实例就是该类型。其功能可用于给客户端回传信息,或获取客户端信息等。
- RRQMSocket.ConnectSetting:用于客户端连接时的参数类,入参目标IP,端口号等信息。
- RRQMSocket.DataLock:本程序集由于性能考虑,并未对传输的数据进行加密,但是也提供了加密方法,通过调用DataLock的方法,即可以对数据进行加密。
主要的类就这些,还有其他工具类就不赘述了,大家可以下载来自由查看。
创建普通报文TCP服务器
普通TCP报文服务器旨在能接收和处理普通的TCP报文,这意味着可以实现跨平台等操作,具体的实现如下:
一、建立服务器主类及辅助类
新建类文件,命名为SimpleTcpService
,使其继承于TcpService
,然后实现其创建辅助类的方法CreatSocketCliect
,然后再创建类文件,命名为SimpleTcpSocketClient
,使其继承于TcpSocketClient
,并实现其处理数据的方法HandleBuffer
。
解释:
服务器主类的主要功能是接收连接、检验连接、管理连接等工作,而不进行数据的接收和处理,所以必须依托于辅助类。
辅助类的主要功能是接收和处理数据,以及给客户端回传信息等。所以在辅助类SimpleTcpSocketClient
中必须实现处理数据的方法,当然回传的方法也被包含在了Send方法中。
/*若汝棋茗 */
public class SimpleTcpService : TcpService
{
#region Methods
/// <summary>
///重写TcpSocketClient的获取方式,类似于SimpleTcpSocketClient类
///该类继承于抽象类TcpSocketClient
///该方法的主要作用是生成用于和客户端通信的辅助类
/// </summary>
/// <returns></returns>
protected override TcpSocketClient CreatSocketCliect()
{
SimpleTcpSocketClient socketClient = new SimpleTcpSocketClient();
return socketClient;
}
#endregion Methods
}
/* 若汝棋茗*/
/// <summary>
/// 该类是简单TCP的辅助类
/// </summary>
public class SimpleTcpSocketClient : TcpSocketClient
{
int a = 0;
#region Methods
/// <summary>
/// 该方法的主要作用是处理接收到的TCP流数据
/// 该数据与发送方不完全一致,可能会发生粘包,分包等情况。
/// </summary>
/// <param name="buffer"></param>
/// <param name="r"></param>
public override void HandleBuffer(byte[] buffer, int r)
{
if (++a%100==0)
{
Console.WriteLine(a);
}
this.Send(buffer,0,r);//通过默认Send方法,把收到的数据原数返回,该数据亦不完全和Client收到的数据一致,可能会发生粘包,分包等情况。
}
#endregion Methods
}
二、开启服务器
SimpleTcpService service = new SimpleTcpService();
BindSetting setting = new BindSetting();
setting.IP = "127.0.0.1";
setting.Port = 7789;
setting.MultithreadThreadCount = 10;
try
{
service.Bind(setting);
Console.WriteLine("绑定成功");
}
catch (RRQMLicenceKeyException)
{
MessageBox.Show("密钥验证失败");
}
catch (Exception e)
{
MessageBox.Show(e.Message);
}
创建客户端并连接
一、创建客户端
在普通TCP服务器中,对于客户端没有特殊的要求,使用一般的TCP客户端即可,但为程序统一,且客户端也需要多线程的话,可以使用以下方法:
新建类文件,命名为SimpleTcpClient
,并实现其处理数据的方法HandleBuffer
,然后可以使用其内置方法Send进行发送数据,如果服务器有数据回传,则会调用HandleBuffer
方法。
/*
若汝棋茗
*/
/// <summary>
/// 该类是基于Socket的简单TCP的客户端类
/// 通过该类发送的字节流不完全和接收方保持一致
/// 可能会发生分包、粘包等情况
/// </summary>
public class SimpleTcpClient : TcpClient
{
#region Methods
/// <summary>
/// 该方法主要作用是对服务器发送来的字节流进行处理
/// 该数据与发送方不完全一致,可能会发生粘包,分包等情况。
/// 当然也如果服务器没有返回数据的话,也不会调用该方法。
/// </summary>
/// <param name="buffer"></param>
/// <param name="r">接收长度</param>
public override void HandleBuffer(byte[] buffer, int r)
{
string mes = Encoding.UTF8.GetString(buffer,0,r);
Console.WriteLine($"已接收到信息:{mes}");
}
#endregion Methods
}
二、连接服务器
SimpleTcpClient client = new SimpleTcpClient();
ConnectSetting connectSetting = new ConnectSetting();
connectSetting.TargetIP = "127.0.0.1";
connectSetting.TargetPort = 7789;
client.Connect(connectSetting);
Console.WriteLine("连接成功");
for (int i = 0; i < 10000; i++)
{
// Console.ReadKey();
client.Send(Encoding.UTF8.GetBytes("若汝棋茗"));
}
结束语:
教程到这里也就基本结束了,但是这个程序集所展示的能力却远不止这些,比如高性能TCP框架
、高性能不粘包TCP框架
、RPC框架
、高性能HTTP协议框架
等。如有感兴趣的小伙伴可以一起来看看哟。
内容总结
以上是互联网集市为您收集整理的C# 高并发、高性能TCP框架,可跨平台处理全部内容,希望文章能够帮你解决C# 高并发、高性能TCP框架,可跨平台处理所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。