NET使用SuperSocket完成TCP/IP通信
2023-09-27 14:23:17 时间
1)为什么使用SuperSocket?
性能高,易上手。有中文文档,我们可以有更多的时间用在业务逻辑上,SuperSocket有效的利用自己的协议解决粘包
2)SuperSocket的协议内容?
命令 body 列如:TestCommand 1 2
3)怎样在Net下使用 SuperSocket?
1)新建项目命名为SuperSocketWeb
2)引用程序集-》NuGet工具搜索安装SuperSocket,SuperSocket.Engine两个组件
3)下载测试工具SocketTool 官网demo存在
4)新建链接类 TestSession,每个链接为一个Session
using SuperSocket.SocketBase; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using SuperSocket.SocketBase.Protocol; namespace SuperSocket { public class TestSession : AppSession<TestSession> { public int CustomID { get; set; } public string CustomName { get; set; } /// <summary> /// 用户连接会话 /// </summary> protected override void OnSessionStarted() { Console.WriteLine("新的用户请求"); base.OnSessionStarted(); } /// <summary> /// 未知的用户请求命令 /// </summary> /// <param name="requestInfo"></param> protected override void HandleUnknownRequest(StringRequestInfo requestInfo) { base.HandleUnknownRequest(requestInfo); } /// <summary> /// 会话关闭 /// </summary> /// <param name="reason"></param> protected override void OnSessionClosed(CloseReason reason) { base.OnSessionClosed(reason); } } }
5)新建命令类TestCommand
using SuperSocket.SocketBase.Command; using SuperSocket.SocketBase.Protocol; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace SuperSocket { public class TestCommand : CommandBase<TestSession, StringRequestInfo> { /// <summary> /// 命令处理类 /// </summary> /// <param name="session"></param> /// <param name="requestInfo"></param> public override void ExecuteCommand(TestSession session, StringRequestInfo requestInfo) { session.CustomID = new Random().Next(10000, 99999); session.CustomName = "hello word"; var key = requestInfo.Key; var param = requestInfo.Parameters; var body = requestInfo.Body; //返回随机数session.Send(session.CustomID.ToString());
//返回
session.Send(body);
}
}
}
6)新建服务类 TestServer
using SuperSocket.SocketBase; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace SuperSocket { public class TestServer : AppServer<TestSession> { } }
7)开启tcp/ip监听
在Global->Application_Start中开启服务监听,最好使用日志记录监听的开启情况
var appServer = new TestServer(); if (!appServer.Setup(2012)) //开启的监听端口 { return; } if (!appServer.Start()) { return; }
4)测试demo
打开SocketTool,链接服务器ip+端口号。注意在命令结束要按回车哦,红色框的位置
返回表示成功,你也可以自定义自己想要的返回值
相关文章
- ASP.NET strange compilation error
- asp.net中bin目录下的 dll.refresh文件
- “net.tcp://localhost:9000/ObtainData”处带有协定“"IObtainData"”的 ChannelDispatcher 无法打开其 IchannelListener。
- 大比速:remoting、WCF(http)、WCF(tcp)、WCF(RESTful)、asp.net core(RESTful) .net core 控制台程序使用依赖注入(Autofac)
- Word控件Spire.Doc 【文档操作】教程(六):在 C#、VB.NET 中计算文档中的单词数、更改语言词典
- Word控件Spire.Doc 【文档操作】教程(六):在 C#、VB.NET 中计算文档中的单词数、更改语言词典
- 随机数是骗人的,.Net、Java、C为我作证
- ASP.NET Web API实现缓存的2种方式
- 第88节:Java中的Ajax和ASP.NET和TCP/IP 教程和JSON
- 基于ASP.NET+SQL Server简单的 MVC 电商网站【100010406】
- .net core 3.1
- .Net魔法堂:开启IIS的WebGarden、WebFarm和StateServer之旅
- OAuth2 for asp.net web api
- asp.net mvc中用angularJs写的增删改查的demo。初学者,求指点。。
- NET项目反编译+VS解决方案整理流程