博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
DIOCP开源项目-DIOCP3直接发送对象,帮你处理粘包问题
阅读量:6300 次
发布时间:2019-06-22

本文共 1352 字,大约阅读时间需要 4 分钟。

该DEMO演示,如何在客户端与服务端之间直接传递TStream对象,让你专注于处理数据逻辑,可以忽略处理网络传输间粘包的问题。

上面由服务端向所有的客户端推送一个消息TMemoryStream对象(该对象为字符串数据)。

 

代码解释:

procedure TfrmMain.actPushMsgExecute(Sender: TObject);var  lvList:TList;  i: Integer;  lvStream:TMemoryStream;  s:AnsiString;begin  lvList := TList.Create;  try    lvStream := TMemoryStream.Create;    try      s := edtMsg.Text;      lvStream.Write(s[1], Length(s));      // 获取所有的在线客户端列表,      FTcpServer.getOnlineContextList(lvList);      // 循环推送到所有的客户端去
for i := 0 to lvList.Count-1 do      begin        //直接推送TMemoryStream对象
<内部试用编码器将tstream编码成协议格式,然后发送>
TIOCPClientContext(lvList[i]).writeObject(lvStream);      end;    finally      lvStream.Free;    end;  finally    lvList.Free;  end;end;

上面为推送按钮的代码

 

constructor TfrmMain.Create(AOwner: TComponent);begin  inherited Create(AOwner);  FTcpServer := TIOCPConsole.Create(Self);  FTcpServer.createDataMonitor;  FTcpServer.OnDataObjectReceived := OnRecvObject;  // register decoder and encoder class  FTcpServer.registerCoderClass(TIOCPStreamDecoder, TIOCPStreamEncoder);  TFMMonitor.createAsChild(pnlMonitor, FTcpServer);end;

上面注册编码和解码器,这样可以在接受数据时和发送数据时,处理对象的转换工作,同时赋值了接收对象事件。

 

onRecvObject,如果解码成功一个对象时,会触发一次事件

procedure TfrmMain.OnRecvObject(pvClientContext: TIocpClientContext;  pvObject: TObject);begin  pvClientContext.writeObject(pvObject);end;

//上面代码直接把对象推送回客户端。

 

 

客户端代码类似,可以下载socket-coder\StreamCoder查看完整源码。

转载地址:http://okgta.baihongyu.com/

你可能感兴趣的文章
我的友情链接
查看>>
Java Cloud Foundry win7 win8 环境安装。
查看>>
eclipse的快捷键
查看>>
小白学习linux的学习路线
查看>>
以最快的速度求出Fibonacci 序列的第n项
查看>>
JAVA课程 一、初识JAVA
查看>>
springboot整合hibernate配置
查看>>
性能调优之mysql通过status性能优化 3
查看>>
GBin1专题之Web热点#6
查看>>
42个免费的长阴影的图标(PSD格式)
查看>>
java异常
查看>>
OakenSCD - 专业的SCL查看工具
查看>>
rufus下载包,exsi自启动制作工具
查看>>
情感分析 | 一份就职宣誓也许就可以预测一个国家未来几年的政治形势
查看>>
【安全牛学习笔记】APPSCAN
查看>>
跨交换机实现VLAN
查看>>
CentOS7.4——Apache优化应用四(防盗链)
查看>>
MySQL中too many connections问题解决
查看>>
我公司卷板机2010年度全胜寰球卷板机事业50强
查看>>
nginx+lua的安装
查看>>