首页 > 其他分享 >[转] SuperSocket 手把手教你入门 傻瓜教程

[转] SuperSocket 手把手教你入门 傻瓜教程

时间:2023-07-19 09:24:39浏览次数:47  
标签:教程 Console SuperSocket 手把手 appServer WriteLine 服务器 客户端

1(服务器单向接收客户端发送数据)

 

 

目录

一、SuperSocket 简介

二、Socket调试工具 SocketTool

三、移植C# SuperSocket 简介

四、移植

五、验证

致谢:


        我是一名单片机嵌入式软件开发工程师,之前从来没有接触过PC端的编程工作,只是这二年由于工程项目有需求,因此匆忙学习C#语言并开发了一款简单的C/S架构的服务器程序,勉强可以满足工程需要,但是毕竟自己非专业人员,编写的程序还有很多漏洞,很多地方还有欠缺,所以空闲时候一直想在网上寻找一种功能强大、稳定可靠的C/S架构的服务器和客户端开源程序来移植到工程项目中,通过网友的介绍知道了SuperSocket,用它可以非常便捷的创建一个高可用,高并发的服务系统。这部教程本人从头到尾介绍如何利用SuperSocket搭建一个属于自己的服务器程序。

一、SuperSocket 简介

       官方网站 :SuperSocket 

        SuperSocket 是一个轻量级的可扩展的Socket 开发框架,由江振宇先生开发。


1、SuperSocket特点:

  • 简单易用,只需要几个类就能创建出健壮的Socket服务器端程序

  • 性能优良,稳定可靠

  • 支持各种协议, 内置的协议解析工具让你把实现通信协议这种复杂的工作变得很简单

  • 自动支持SSL/TLS传输层加密

  • 强大,灵活而且可扩展的配置让你开发Socket服务器省时省力

  • 支持多个socket服务器实例运行,而且支持多个服务器实例的隔离

  • SuperSocket能以控制台或者Windows服务形式运行,一个脚本就能将SuperSocket安装成服务

  • 灵活的日志策略能够记录大部分socket活动

  • 支持UDP

  • 支持IPv6

  • 支持Windows Azure

  • 支持Linux/Unix操作系统(通过Mono 2.10或以上版本)

  • 内置可直接使用的Flash/Silverlight Socket策略服务器


2、SuperSocket项目特点: 

  • 开源,基于Apache 2.0协议,可以免费使用到商业项目。
  • 高性能的事件驱动通信。
  • 会话级别的发送队列能够让你通过会话并发的发送数据,并保持高性能和可控性。
  • 强大且高性能的协议解析实现工具帮你简化了网络数据的分析工作:自带多种数据帧过滤器,可实现自己的数据帧过滤器,可自定义数据内容协议,,粘包拆包都是浮云。
  • 轻量级意味着组件可以自由选择使用,可根据环境变化变更。

3、SuperSocket层次示意图

          

二、Socket调试工具 SocketTool

        链接:百度网盘 请输入提取码
        提取码(永久有效):s5wy

                                           

三、移植C# SuperSocket 简介

移植C# SuperSocket需要完成以下几个步骤。

1、使用NuGet下载SuperSocket组件

        使用Visual Studio 2017 开发平台【管理NuGet工具包(N)】,在左边的浏览标签中,在输入框输入SuperSocket,搜索SuperSocket,然后下载SuperSocket组件和SuperSocket.Engine组件。

2、配置log4net.config

      Config文件夹下的log4net.config文件的【复制到输出目录】配置为“如果较新则复制”。

3、创建AppServer实例

     创建Socket服务实例,启动服务器监听客户端。 

     (1)、使用var appServer = new AppServer(); 创建一个AppServer实例。

     (2)、使用 AppServer.Setup(Port)方法:安装和监听端口。

     (3)、使用AppServer.Start()方法:启动AppServer实例。 

     (4)、使用AppServer.Stop()方法:结束AppServer实例。

  • AppServer即为一个Socket监听对象,AppServer实例的Setup为设置监听端口,调用Setup方法时,组件会检测端口是否被占用,如果被占用则会返回False。
  • 调用Setup方法只进行端口占用检测,而不会启动服务,当端口检测校验通过后,需要调用Start方法。
  • 调用Start方法会返回监听是否启动成功,完成以上步骤,则创建了一个简单的SuperSocket实例。 
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using SuperSocket.Common;
  7. using SuperSocket.SocketBase;
  8. using SuperSocket.SocketBase.Protocol;
  9. namespace SuperSocketTest
  10. {
  11. class Program
  12. {
  13. static void Main(string[] args)
  14. {
  15. var appServer = new AppServer();
  16. if (!appServer.Setup(2021)) // Setup with listening port
  17. {
  18. Console.WriteLine("Failed to Setup!");
  19. Console.ReadKey();
  20. return;
  21. }
  22. Console.WriteLine();
  23. if (!appServer.Start()) //Try to start the appServer
  24. {
  25. Console.WriteLine("Failed to start!");
  26. Console.ReadKey();
  27. return;
  28. }
  29. Console.WriteLine("The server started successfully, press key 'q' to stop it!");
  30. while (Console.ReadKey().KeyChar != 'q')
  31. {
  32. Console.WriteLine();
  33. continue;
  34. }
  35. appServer.Stop();
  36. Console.WriteLine("The Server was stopped!");
  37. Console.ReadKey();
  38. }
  39. }
  40. }

 4、创建AppSession实例

        当我们完成了一系列AppServer的初始化工作后,我们就需要对组件的相关事件进行封装,如客户端连接,断开,接受数据事件,这时候我们就可以通过appSession进行创建。

         只有创建了AppSession实例,我们的服务器才能接收客户端的数据以及给客户端发送数据!!!,需要完成以下工作:

(1)、appServer.NewSessionConnected += appServer_NewSessionConnected;                             注册一个新客户端连接。
(2)、appServer.NewRequestReceived += appServer_NewRequestReceived;                               注册接收客户端报文和发送报文事件
(3)、appServer.SessionClosed += appServer_SessionClosed;

             注册客户端关闭连接。

(4)、编写static void appServer_NewSessionConnected(AppSession session)程序代码    (5)、编写static void appServer_NewRequestReceived(AppSession session, SuperSocket.SocketBase.Protocol.StringRequestInfo requestInfo)程序代码

(6)、编写static void appServer_SessionClosed(AppSession session, CloseReason value)程序代码

  1. //SuperSocket自定义了三个事件 ,连接事件,接收事件,关闭事件
  2. appServer.NewSessionConnected += appServer_NewSessionConnected;
  3. appServer.NewRequestReceived += appServer_NewRequestReceived;
  4. appServer.SessionClosed += appServer_SessionClosed;
  5. while (Console.ReadKey().KeyChar != 'q')
  6. {
  7. Console.WriteLine();
  8. continue;
  9. }
  10. appServer.Stop();
  11. Console.WriteLine("The Server was stopped!");
  12. Console.ReadKey();
  13. }
  14. static void appServer_NewRequestReceived(AppSession session, SuperSocket.SocketBase.Protocol.StringRequestInfo requestInfo)
  15. {
  16. var key = requestInfo.Key;
  17. var body = requestInfo.Body;
  18. switch (key)
  19. {
  20. case "1":
  21. Console.WriteLine("Hello Word");
  22. break;
  23. case "2":
  24. Console.WriteLine("SuperSocket Demo");
  25. break;
  26. case "3":
  27. Console.WriteLine(body);
  28. break;
  29. }
  30. }
  31. static void appServer_SessionClosed(AppSession session, CloseReason value)
  32. {
  33. string ipAddress_Close = session.RemoteEndPoint.ToString();
  34. Console.WriteLine("已关闭连接! " + ipAddress_Close);
  35. }
  36. static void appServer_NewSessionConnected(AppSession session)
  37. {
  38. Console.WriteLine("已连接! " + session.RemoteEndPoint);
  39. }

、移植

1、Visual Studio 2017 创建一个控制台应用工程项目

       工程项目名称为:SuperSocketTest

2、使用NuGet下载SuperSocket组件  

切换到浏览选项卡

在浏览选项卡的输入框中输入:SuperSocket,搜索SuperSocket框架组件。先安装SuperSocket组件。

安装 SuperSocket 组件进行中...

SuperSocket 组件安装完毕...

3、使用NuGet下载SuperSocket.Engine组件

安装SuperSocket.Engine组件完毕。

4、Config文件夹下将 log4net.config文件的【复制到输出目录】配置为“如果较新则复制”。

下图是:安装完SuperSocket组件和SuperSocket.Engine组件并配置好log4net.config的截屏。           

5、在Program.cs中编写【创建AppServer实例】程序代码

        创建AppServer实例后,可以安装、启动和停止AppServer服务器。

        下面是官方提供的代码示例可以用来安装、启动和停止服务器。我直接把官方提供的代码拿来用。但是端口号修改为我需要的端口2021。

  1. namespace SuperSocketTest
  2. {
  3. class Program
  4. {
  5. static void Main(string[] args)
  6. {
  7. var appServer = new AppServer();
  8. if (!appServer.Setup(2021)) // Setup with listening port
  9. {
  10. Console.WriteLine("Failed to Setup!");
  11. Console.ReadKey();
  12. return;
  13. }
  14. Console.WriteLine();
  15. if (!appServer.Start()) //Try to start the appServer
  16. {
  17. Console.WriteLine("Failed to start!");
  18. Console.ReadKey();
  19. return;
  20. }
  21. Console.WriteLine("The server started successfully, press key 'q' to stop it!");
  22. while (Console.ReadKey().KeyChar != 'q')
  23. {
  24. Console.WriteLine();
  25. continue;
  26. }
  27. appServer.Stop();
  28. Console.WriteLine("The Server was stopped!");
  29. Console.ReadKey();
  30. }
  31. }
  32. }

        【创建AppServer实例】主要完成以下3项工作:

         (1)、使用var appServer = new AppServer(); 创建一个AppServer实例。        

var appServer = new AppServer();

          (2)、使用appServer.Setup(2021)检测2021端口是否被占用。 

                       如果2021端口被占用,打印输出"Failed to Step!",然后返回。

  1. if (!appServer.Setup(2021)) // Setup with listening port
  2. {
  3. Console.WriteLine("Failed to Setup!");
  4. Console.ReadKey();
  5. return;
  6. }

           (3)、使用appServer.Start()启动服务器。 

                       如果2021端口没有被占用,则调用appServer.Start()启动服务器。

  1. if (!appServer.Start()) //Try to start the appServer
  2. {
  3. Console.WriteLine("Failed to start!");
  4. Console.ReadKey();
  5. return;
  6. }

        做完以上工作后,只完成了服务器的启动工作,此时还不具备和客户的连接检测及通信功能,因此还需要创建AppSession实例。

6、在Program.cs中编写【创建AppSession实例】程序代码

        创建AppSession实例后,才可以处理客户端发送信息。【创建AppSession实例】主要完成以下几项工作:

        (1)、注册客户端连接方法

appServer.NewSessionConnected += appServer_NewSessionConnected;

        (2)、注册客户端断开连接方法

appServer.SessionClosed += appServer_SessionClosed

        (3)、注册会话新建事件处理方法

appServer.NewRequestReceived += appServer_NewRequestReceived;

        (4)、编写客户端连接方法程序代码

                     你可以在客户端连接方法中打印输出信息或给客户端发送数据。

static void appServer_NewSessionConnected(AppSession session)

        (5)、编写客户端断开连接方法程序代码

                     你可以在客户端断开连接方法中在控制台窗口打印输出信息或给客户端发送数据。

static void appServer_SessionClosed(AppSession session, CloseReason value)

        (6)、编写会话新建事件处理方法程序代码

                     你可以在会话新建事件处理方法中处理客户端发送的数据,处理完后可以在控制台窗口打印输出信息或给客户端发送数据。

  1. static void appServer_NewRequestReceived(AppSession session, SuperSocket.SocketBase.Protocol.StringRequestInfo requestInfo)

7、完整的Program.cs程序代码

    (1)、在客户端连接方法程序代码static void appServer_NewSessionConnected(AppSession session)中把客户端的IP地址打印输出到控制台窗口,并显示“已连接!”。

    (2)、在客户端断开连接方法程序代码static void appServer_SessionClosed(AppSession session, CloseReason value)中把客户端的IP地址打印输出到控制台窗口,并显示“已关闭连接!”。

    (3)、在会话新建事件处理方法程序代码static void appServer_NewRequestReceived(AppSession session, SuperSocket.SocketBase.Protocol.StringRequestInfo requestInfo)
中处理客户端发送的数据信息。

         当客户端发送数据的key为1时,服务器在控制台窗口打印输出Hello World

         当客户端发送数据的key为2时,服务器在控制台窗口打印输出SuperSocket Demo

         当客户端发送数据的key为3时,服务器在控制台窗口打印输出客户端发送的数据。

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using SuperSocket.Common;
  7. using SuperSocket.SocketBase;
  8. using SuperSocket.SocketBase.Protocol;
  9. namespace SuperSocketTest
  10. {
  11. class Program
  12. {
  13. static void Main(string[] args)
  14. {
  15. var appServer = new AppServer();
  16. if (!appServer.Setup(2021)) // Setup with listening port
  17. {
  18. Console.WriteLine("Failed to Setup!");
  19. Console.ReadKey();
  20. return;
  21. }
  22. Console.WriteLine();
  23. if (!appServer.Start()) //Try to start the appServer
  24. {
  25. Console.WriteLine("Failed to start!");
  26. Console.ReadKey();
  27. return;
  28. }
  29. Console.WriteLine("The server started successfully, press key 'q' to stop it!");
  30. //SuperSocket自定义了三个事件 ,连接事件,接收事件,关闭事件
  31. appServer.NewSessionConnected += appServer_NewSessionConnected;
  32. appServer.NewRequestReceived += appServer_NewRequestReceived;
  33. appServer.SessionClosed += appServer_SessionClosed;
  34. while (Console.ReadKey().KeyChar != 'q')
  35. {
  36. Console.WriteLine();
  37. continue;
  38. }
  39. appServer.Stop();
  40. Console.WriteLine("The Server was stopped!");
  41. Console.ReadKey();
  42. }
  43. static void appServer_NewRequestReceived(AppSession session, SuperSocket.SocketBase.Protocol.StringRequestInfo requestInfo)
  44. {
  45. var key = requestInfo.Key;
  46. var body = requestInfo.Body;
  47. switch (key)
  48. {
  49. case "1":
  50. Console.WriteLine("Hello Word");
  51. break;
  52. case "2":
  53. Console.WriteLine("SuperSocket Demo");
  54. break;
  55. case "3":
  56. Console.WriteLine(body);
  57. break;
  58. }
  59. }
  60. static void appServer_SessionClosed(AppSession session, CloseReason value)
  61. {
  62. string ipAddress_Close = session.RemoteEndPoint.ToString();
  63. Console.WriteLine("已关闭连接! " + ipAddress_Close);
  64. }
  65. static void appServer_NewSessionConnected(AppSession session)
  66. {
  67. Console.WriteLine("已连接! " + session.RemoteEndPoint);
  68. }
  69. }
  70. }

五、验证

1、运行工程项目

      可以观察到SuperSocket服务器启动成功。

2、运行SocketTool

 鼠标单击【连接】按钮

 

         在之前的程序代码中,如果客户端发送“1”,服务器会打印输出"Hello World";如果客户端发送“2”,服务器会打印输出“SuperSocket Demo”;如果客户端发送“3”,服务器会将客户端“3”后面的字符原封不动的打印输出。

 3、客户端发送“1”

       可以观察到服务器打印输出了"Hello World"。

       警告:在客户端输入数字1后,一定要按下回车键才能点【发送数据】按钮,因为SuperSocket规定客户端给服务器发送的报文必须以"\r\n"为结束符,否则服务器会认为是非法报文不预处理。

 4、客户端发送“2”

       可以观察到服务器打印输出了"SuperSocket Demo"。

警告:在客户端输入数字2后,一定要按下回车键才能点【发送数据】按钮,因为SuperSocket规定客户端给服务器发送的报文必须以"\r\n"为结束符,否则服务器会认为是非法报文不预处理。

 5、客户端发送“3 send Body !”

       可以观察到服务器打印输出了"send Body !"。

警告:在客户端输入完“3 send Body !”后,一定要按下回车键才能点【发送数据】按钮,因为SuperSocket规定客户端给服务器发送的报文必须以"\r\n"为结束符,否则服务器会认为是非法报文不预处理。

警告:3和send之间一定要有一个空格。 

 6、SocketTool工具软件上点击【断开】按钮

可以观察到断开连接成功。 

7、在控制台窗口中输入q

可以观察到服务器停止。 

2(服务器和客户端双向通信)

 

目录

 一、安装SuperSocket组件

二、服务器检测到新连接时给客户端发送数据

三、服务器在会话事件处理方法中给客户端发送数据

四、源程序


        仅仅实现客户端将报文发送给服务器,服务器收到客户端的数据后打印输出到控制台窗口,还没有实现服务器如何给客户端发送数据。

        下面就简要介绍服务器如何给客户端发送数据。

         服务器给客户端发送数据,只需要使用Session的Send方法即可实现。

 一、安装SuperSocket组件

        安装SuperSocket组件请参见上一篇文章。

二、服务器检测到新连接时给客户端发送数据

       服务器检测到客户端创建了一个新连接时,仅仅在控制台窗口打印输出““已连接!”+客户端IP地址。

        现在我们改造一下,当服务器检测到客户端创建了一个新连接时,不仅在控制台窗口打印输出“Connect Success!”+客户端IP地址+连接号,而且服务器还给客户端发送数据“Connect Success!”+客户端IP地址+连接号。

         改造后的新连接方法程序代码如下:

  1. static void appServer_NewSessionConnected(AppSession session)
  2. {
  3. Console.WriteLine("Connect Success! " + session.RemoteEndPoint);
  4. session.Send("Connect Success! " + session.RemoteEndPoint);
  5. }

       验证:

        下面是运行效果,当先运行服务器程序,然后运行SocketTool工具软件, SocketTool工具连接服务器的IP地址输入127.0.0.1,端口号输入2021 ,当在SocketTool工具软件上点击【连接】按钮后:

        (1)、服务器的控制台窗口打印输出“Connect Success!  127.0.0.1:50173”  

        (2)、服务器给客户端发送数据“Connect Success!  127.0.0.1:50173”  

三、服务器在会话事件处理方法中给客户端发送数据

       服务器在会话事件处理方法检测到客户端给服务器发送数据的key为1时,仅仅在控制台窗口打印输出“Hello World”。检测到客户端给服务器发送数据的key为2时,仅仅在控制台窗口打印输出“SuperSocket Demo”。检测到客户端给服务器发送数据的key为3时,仅仅在控制台窗口打印输出客户端发送的数据。

        现在我们改造一下:

        1、服务器在会话事件处理方法检测到客户端给服务器发送数据的key为1时

             (1)、在控制台窗口打印输出“Hello World”。

             (2)、服务器给客户端发送数据“1. Hello Word”。

        2、服务器在会话事件处理方法检测到客户端给服务器发送数据的key为2时

             (1)、在控制台窗口打印输出“SuperSocket Demo”。

             (2)、服务器给客户端发送数据“2. SuperSocket Demo”。

        3、服务器在会话事件处理方法检测到客户端给服务器发送数据的key为3时

             (1)、在控制台窗口打印输出客户端发送的数据。

             (2)、服务器给客户端发送数据客户端发送的数据。

         改造后的会话事件处理方法程序代码如下:

  1. static void appServer_NewRequestReceived(AppSession session, SuperSocket.SocketBase.Protocol.StringRequestInfo requestInfo)
  2. {
  3. var key = requestInfo.Key;
  4. var body = requestInfo.Body;
  5. switch (key)
  6. {
  7. case "1":
  8. Console.WriteLine("Hello Word");
  9. session.Send("1. Hello Word");
  10. break;
  11. case "2":
  12. Console.WriteLine("SuperSocket Demo");
  13. session.Send("2. SuperSocket Demo");
  14. break;
  15. case "3":
  16. Console.WriteLine(body);
  17. session.Send(body);
  18. break;
  19. }
  20. }

       验证:

         下面是运行效果,当先运行服务器程序,然后运行SocketTool工具软件, SocketTool工具连接服务器的IP地址输入127.0.0.1,端口号输入2021 ,然后在SocketTool工具软件上点击【连接】按钮,服务器和客户端连接成功。

 1、SocketTool工具发送数据"1"

        在SocketTool工具输入发送数据“1”(警告:输入数字1后,必须要按回车键,因为SuperSocket要求报文的结束符必须是\r\n,否则不予处理)

        我们观察到客户端发送数据“1”后,服务器在控制台窗口打印输出“Hello World”,然后服务器给客户端发送数据“1. Hello Word”。

2、SocketTool工具发送数据"2"

        在SocketTool工具输入发送数据“2”(警告:输入数字2后,必须要按回车键,因为SuperSocket要求报文的结束符必须是\r\n,否则不予处理)

        我们观察到客户端发送数据“2”后,服务器在控制台窗口打印输出“ SuperSocket Demo”,然后服务器给客户端发送数据“2. SuperSocket Demo”。

 3、SocketTool工具发送数据"3 I love SuperSocket"

        在SocketTool工具输入发送数据“3 I love SuperSocket”(警告:输入“3 I love SuperSocket”后,必须要按回车键,因为SuperSocket要求报文的结束符必须是\r\n,否则不予处理;另外3和I之间必须有1个空格)

        我们观察到客户端发送数据“3 I love SuperSocket”后,服务器在控制台窗口打印输出“I love SuperSocket”,然后服务器给客户端发送数据“I love SuperSocket”。

        验证完毕,服务器给客户端发送数据OK。

四、源程序

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using SuperSocket.Common;
  7. using SuperSocket.SocketBase;
  8. using SuperSocket.SocketBase.Protocol;
  9. namespace SuperSocket服务器和客户端双向通信
  10. {
  11. class Program
  12. {
  13. static void Main(string[] args)
  14. {
  15. var appServer = new AppServer();
  16. if (!appServer.Setup(2021)) // Setup with listening port
  17. {
  18. Console.WriteLine("Failed to Setup!");
  19. Console.ReadKey();
  20. return;
  21. }
  22. Console.WriteLine();
  23. if (!appServer.Start()) //Try to start the appServer
  24. {
  25. Console.WriteLine("Failed to start!");
  26. Console.ReadKey();
  27. return;
  28. }
  29. Console.WriteLine("The server started successfully, press key 'q' to stop it!");
  30. //SuperSocket自定义了三个事件 ,连接事件,接收事件,关闭事件
  31. appServer.NewSessionConnected += appServer_NewSessionConnected; //连接事件
  32. appServer.NewRequestReceived += appServer_NewRequestReceived; //接收事件
  33. appServer.SessionClosed += appServer_SessionClosed; //关闭事件
  34. while (Console.ReadKey().KeyChar != 'q')
  35. {
  36. Console.WriteLine();
  37. continue;
  38. }
  39. appServer.Stop();
  40. Console.WriteLine("The Server was stopped!");
  41. Console.ReadKey();
  42. }
  43. static void appServer_NewSessionConnected(AppSession session)
  44. {
  45. Console.WriteLine("已连接! " + session.RemoteEndPoint);
  46. session.Send("Connect Success! " + session.RemoteEndPoint);
  47. }
  48. static void appServer_NewRequestReceived(AppSession session, SuperSocket.SocketBase.Protocol.StringRequestInfo requestInfo)
  49. {
  50. var key = requestInfo.Key;
  51. var body = requestInfo.Body;
  52. switch (key)
  53. {
  54. case "1":
  55. Console.WriteLine("Hello Word");
  56. session.Send("1. Hello World");
  57. break;
  58. case "2":
  59. Console.WriteLine("SuperSocket Demo");
  60. session.Send("2. SuperScoket Demo");
  61. break;
  62. case "3":
  63. Console.WriteLine(body);
  64. session.Send(body);
  65. break;
  66. }
  67. }
  68. static void appServer_SessionClosed(AppSession session, CloseReason value)
  69. {
  70. string ipAddress_Close = session.RemoteEndPoint.ToString();
  71. Console.WriteLine("已关闭连接! " + ipAddress_Close);
  72. }
  73. }
  74. }

标签:教程,Console,SuperSocket,手把手,appServer,WriteLine,服务器,客户端
From: https://www.cnblogs.com/castlewu/p/17564668.html

相关文章

  • [转] C# SuperSocket 服务端使用总结
    简介SuperSocket是一个轻量级,跨平台而且可扩展的.Net/MonoSocket服务器程序框架。你无须了解如何使用Socket,如何维护Socket连接和Socket如何工作,但是你却可以使用SuperSocket很容易的开发出一款Socket服务器端软件,例如游戏服务器,GPS服务器,工业控制服务和......
  • Excel数据分析教程_编程入门自学教程_菜鸟教程-免费教程分享
    教程简介Excel数据分析入门教程-从基本到高级概念的简单步骤了解Excel数据分析,其中包括概述,流程,Excel数据分析概述,使用范围名称,表格,使用文本功能清理数据,清洁数据包含日期值,使用时间值,条件格式,排序,过滤,带范围的小计,快速分析,查找功能,数据透视表,数据可视化,验证,财务分析,使用多个表......
  • 【CJsonObject】C++ JSON 解析器使用教程
    能选封装的尽量不使用底层的一、CJsonObject简介CJsonObject是Bwar基于cJSON全新开发一个C++版的JSON库。CJsonObject的最大优势是轻量、简单好用,开发效率极高,尤其对多层嵌套json的读取和生成、修改极为方便。CJsonObject比cJSON简单易用得多,且只要不是有意不......
  • npm安装教程 搭建vue
    一、相关概念npm:Nodejs下的包管理器。webpack:它主要的用途是通过CommonJS的语法把所有浏览器端需要发布的静态资源做相应的准备,比如资源的合并和打包。vue-cli:用户生成Vue工程模板。(帮你快速开始一个vue的项目,也就是给你一套vue的结构,包含基础的依赖库,只需要npminstall......
  • sqoop安装教程
    Sqoop的安装注意:在安装Sqoop之前要配置好本机的Java环境和Hadoop环境先把spoop的安装包sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz拷贝在系统目录下的/root/softwares下面解压配置环境变量#解压tar.gz包[root@qianfeng01local]tar-zxvf/root/sqoop-1.4.7.bin__hadoop-......
  • 超详细OA系统功能测试分析学习教程
    OA系统可以简单快速地建立企业级的办公自动化系统。办公自动化系统是员工及管理者使用频率最高的应用系统,可以极大提高公司的办公效率,帮助企业节省数字化、信息化办公的成本。本文中的OA系统来自于下面的资源:https://www.gougucms.com/home/pages/detail/s/gouguoa.html包含诸多......
  • CoffeeScript教程_编程入门自学教程_菜鸟教程-免费教程分享
    教程简介CoffeeScript是一种相对较新的语言,为开发人员提供了不再有JavaScript缺陷的令人期待的方案。利用CoffeeScript,开发人员即可使用一种轻量级、直观的语言完成编码工作,这种语言就像是Ruby和Python的混合体。对于兼容浏览器的Web应用程序,CoffeeScript将编译为Jav......
  • beginnersbook C 语言教程·翻译完成 | ApacheCN
    译者:飞龙协议:CCBY-NC-SA4.0首先学习C基础知识如何安装TurboC++:编译并运行C程序C程序结构-第一个C程序C关键词-保留字C中的决策控制语句C编程中的if语句C-if..else,嵌套if..else和else..if语句C编程的switch-case语句C中的循环C编程中for的循环C编程中的wh......
  • beginnersbook C++ 教程·翻译完成 | ApacheCN
    译者:飞龙协议:CCBY-NC-SA4.0基础HelloWorld-第一个C++程序C++中的变量C++中的数据类型C++中的运算符控制语句C++中的if语句C++中的switch-case语句C++中的for循环C++中的while循环C++中的do-while循环C++中的continue语句C++中的break语句C++中的goto语句函数C++......
  • haruka-bot-安装教程
    安装go-cqhttp根据haruka-bot文档下载并配置go-cqhttp如果运行go-cqhttp提示错误代码45提取QQ安卓安装包里的文件libfekit.so和libQSec.so将com.tencent.mobileqq.apk重命名为com.tencent.mobileqq.zip,解压,将lib/arm64-v8a里面的libfekit.so和libQSec.so......