首页
学习
活动
专区
圈层
工具
发布

Delphi-Cross-Socket-初探

亲爱的朋友们,久违了!这段时间我们像暂时停靠的列车,默默积蓄能量只为此刻的重新启程。

最近在干嘛,其实从重庆回来以后我一直在研究传奇的引擎,我记得很早很早之前就有粉丝朋友建议我录制,只是我那时候都不知道什么是传奇引擎。现在虽然知道了什么是引擎,但是我也仅仅是对里面的代码比较感兴趣,所以就有了这篇文章

聊到传奇引擎,有一个网络控件(JSocket),我相信做的传奇的多多少少都听过这个控件。我之前的文章里面也有关于网络的介绍,只是都是基于 Windows 的系统环境自己编写的,自己编写的代码总会或多或少存在一些问题,同时辅助工作也不会像开源库那样做的那么到位

介绍

所以我就开启了 Delphi 网络库的搜寻之路,一共有两个要求

开源,之所以要求是开源,因为我不想使用和谐版

依然在更新,这一点其实很重要,只有一直更新的库才有使用的必要。

根据以上两点我搜到了 delphi-cross-socket 和 DIOCP-V5 两个库,那为什么选择使用 delphi-cross-socket 呢,原因是里面有注释、同时代码比较规范,同时这个库也有缺点,就是说可能只是一个底板,更多的功能需要自己去实现,例如:重连、心跳。优点我就不说了,大家有兴趣的话自己去 GitHub 看就可以了,最后贴上 GitHub 地址:

https://github.com/winddriver/Delphi-Cross-Socket

这篇文章说一个事情,虽然官方带有案例,只是我觉得那些案例不太适合我,所以这篇文章算是 delphi-cross-socket 这个库的一个快速入门

中间我也在犹豫到底是用 cross 还是 v5,直到直播的时候遇到一个朋友说他经过压力测试,这两个库相差无几

当然还有一个问题,就是 cross 对于低版本的 Delphi 不支持,尤其是不支持泛型操作的版本,而 DIOCP-V5 则恰恰相反

客户端

需要注意的是 cross 的客户端和服务器使用都是 TCrossSocket 类

ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(line//初始化procedure TForm1.FormCreate(Sender: TObject);begin FSocket := TCrossSocket.Create(0);//建立连接,该事件发生的函数必须是类中的函数 FSocket.OnConnected := OnConnected;//读取数据 FSocket.OnReceived := OnReceived;//发送数据 FSocket.OnSent := OnSend;end;//连接服务器procedure TForm2.Button1Click(Sender: TObject);begin FSocket.Connect('127.0.0.1', 10086,procedure (const Connection: ICrossConnection; const Success: Boolean)begin   TThread.Queue(nil,  // 同步到主线程     procedure     begin       if Success then begin         Memo1.Lines.Add('连接成功');       end else begin         Memo1.Lines.Add('连接失');

      end;     end   );

end

);

end;

像 OnSend 这样的函数都是自己定义的,但是在等号左边的不是自己定义的,至于自己定义的函数对应的参数,像下面这样,当然也可以点进去看

ounter(lineounter(lineprocedure TForm1.OnConnected(const Sender: TObject; const AConnection: ICrossConnection);

服务器端

初始化和客户端一样,所以这里就省略掉了

ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(line//启动监听procedure TForm1.Button1Click(Sender: TObject);begin   //启动侦听 ,Listen(IP,端口号,侦听的结果的回调过程)   FSocket.Listen('127.0.0.1', 10086,     procedure(const AListen: ICrossListen; const ASuccess: Boolean)     begin       TThread.Queue(nil,         procedure         begin           if ASuccess then             //%s 代表的是字符串,%d 代表的是数字             Memo1.Lines.Add(Format('侦听成功,服务器启动的 IP:%s,端口号:%d', ['127.0.0.1', 10086]))           else             Memo1.Lines.Add('侦听失败');         end);

    end);endend;

结语

到此一个最简化的 delphi-cross-socket 入门程序就算结束了,不知道各位看明白没有

你有什么看法?评论区等你

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OmZpj1b9ABWehOIHw1c-Co7w0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。
领券