unity学习(15)——服务器组装(1)

1.新建好的c#项目如下:

文件夹中内容如下:

此时已经可以通过vs2022打开.sln文件,就可以打开项目了

2.我们把逆向后(主程序)的内容的代码粘贴过去。有些逆向功底,很快可以定位到,服务器的入口函数ServerStart.start(10100);

其原始代码如下:

namespace GameServer.Hnalder
{
  internal class ServerStart
  {
    private static Socket server;

    public static void start(int port)
    {
      ServerStart.server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
      ServerStart.server.Bind((EndPoint) new IPEndPoint(IPAddress.Any, port));
      ServerStart.server.Listen(20);
      ServerStart.server.BeginAccept(new AsyncCallback(ServerStart.AcceptCallBack), (object) ServerStart.server);
    }

    public static void stop()
    {
      ServerStart.server.Dispose();
      ServerStart.server.Close();
    }

    private static void AcceptCallBack(IAsyncResult ar)
    {
      MyLog.form.textAdd("有客户端连接");
      try
      {
        Socket asyncState = (Socket) ar.AsyncState;
        Socket socket = asyncState.EndAccept(ar);
        Session session = new Session();
        session.socket = socket;
        LogicHandler.getInstance().sessionOpen(session);
        socket.BeginReceive(session.message, 0, session.message.Length, SocketFlags.None, new AsyncCallback(ServerStart.ReceiveCallBack), (object) session);
        asyncState.BeginAccept(new AsyncCallback(ServerStart.AcceptCallBack), (object) asyncState);
      }
      catch
      {
      }
    }

    private static void ReceiveCallBack(IAsyncResult ar)
    {
      Session asyncState = (Session) ar.AsyncState;
      try
      {
        int count = asyncState.socket.EndReceive(ar);
        if (count == 0)
        {
          MyLog.form.textAdd("有客户端断开连接");
          LogicHandler.getInstance().sessionClose(asyncState);
          return;
        }
        byte[] numArray = new byte[count];
        Buffer.BlockCopy((Array) asyncState.message, 0, (Array) numArray, 0, count);
        ServerStart.readMessage(asyncState, numArray);
      }
      catch (SocketException ex)
      {
        LogicHandler.getInstance().sessionClose(asyncState);
        asyncState.socket.Close();
        return;
      }
      asyncState.socket.BeginReceive(asyncState.message, 0, asyncState.message.Length, SocketFlags.None, new AsyncCallback(ServerStart.ReceiveCallBack), (object) asyncState);
    }

    public static void readMessage(Session session, byte[] bytes)
    {
      try
      {
        ByteArray byteArray = new ByteArray(bytes);
        int num1 = byteArray.ReadInt();
        int num2 = byteArray.ReadInt();
        int num3 = byteArray.ReadInt();
        int length = byteArray.ReadInt();
        string str = (string) null;
        if (length > 0)
          str = byteArray.ReadUTFBytes((uint) length);
        LogicHandler.getInstance().process(session, new SocketModel()
        {
          Type = num1,
          Area = num2,
          Command = num3,
          Message = str
        });
      }
      catch
      {
      }
    }
  }
}

 直接沾进去,一共16个问题

相关推荐

  1. 服务组件Nacos的学习1

    2024-02-21 19:22:04       64 阅读
  2. 服务组件Sentinel的学习1

    2024-02-21 19:22:04       57 阅读
  3. 【Flutter学习笔记】10.1 自定义组件方法简介

    2024-02-21 19:22:04       39 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-21 19:22:04       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-21 19:22:04       106 阅读
  3. 在Django里面运行非项目文件

    2024-02-21 19:22:04       87 阅读
  4. Python语言-面向对象

    2024-02-21 19:22:04       96 阅读

热门阅读

  1. vue3父子组件传值

    2024-02-21 19:22:04       59 阅读
  2. Go 语言中,`rune(a)` 将 `a` 转换为 `rune` 类型

    2024-02-21 19:22:04       49 阅读
  3. SQL Server查询计划(Query Plan)——文本查询计划

    2024-02-21 19:22:04       49 阅读
  4. OutLook-2010——管理邮箱的工具

    2024-02-21 19:22:04       55 阅读
  5. 飞常准查航班小程序采集

    2024-02-21 19:22:04       51 阅读
  6. SpringBoot+WebSocket实现即时通讯(三)

    2024-02-21 19:22:04       49 阅读
  7. Android引入aar包的方法

    2024-02-21 19:22:04       49 阅读
  8. QT6不同场景下的一些代码

    2024-02-21 19:22:04       50 阅读