• NET使用SuperSocket完成TCP/IP通信


    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);
            }
        }
    }
    View Code

    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);
           } 
         }
     }
    View Code

    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>
        {
        }
    }
    View Code

    7)开启tcp/ip监听

     在Global->Application_Start中开启服务监听,最好使用日志记录监听的开启情况

     var appServer = new TestServer();
                if (!appServer.Setup(2012)) //开启的监听端口
                {
                    return;
                }
                if (!appServer.Start())
                {
                    return;
                }
    View Code

    4)测试demo

    打开SocketTool,链接服务器ip+端口号。注意在命令结束要按回车哦,红色框的位置 

    TestCommand 和上面定义的名称要一致,不然搜不到消息

     返回表示成功,你也可以自定义自己想要的返回值

     源码地址:https://github.com/MrsongJl/SuperSocketWeb

    原文地址:http://www.cnblogs.com/songjl/p/6907514.html

  • 相关阅读:
    【代码笔记】iOS-字符串替换回车和换行
    【代码笔记】iOS-在Block中修改外部变量值的
    【代码笔记】iOS-在导航栏中显示等待对话框
    【代码笔记】iOS-手机版本号,机型,操作系统版本,设备唯一标识符
    【代码笔记】iOS-密码在进入后台1小时后重新设置
    【代码笔记】iOS-获得现在的时间(2015-09-11)
    【代码笔记】iOS-对数组进行排序
    【代码笔记】iOS-播放从网络上下载的语音
    【代码笔记】iOS-将地址解析成经纬度
    【代码笔记】iOS-长条label
  • 原文地址:https://www.cnblogs.com/tianciliangen/p/9186538.html
Copyright © 2020-2023  润新知