ZServer4D中踩过的坑

DoubleTunnel通道端口的问题

Server 端 RecvTunnelPort 和 SendTunnelPort 与 Client 端 RecvTunnelPort 和 SendTunnelPort 是相反的。
简单举例:

    Server--------------------------Client
  RecvTunnelPort >>>>>>>>>>>> SendTunnelPort
  SendTunnelPort >>>>>>>>>>>> RecvTunnelPort
  • 调试了两天,按照惯性思维认为Server和Client申明的端口肯定是Recv对Recv,Send对Send,所以总是数据发送失败,又不好意思问(怕暴露了我是菜鸟的事实),直到第二天下午看大佬提供的Demo,才注意到原来Send和Recv对应的端口关系要交换,发送数据就像画一个圆一样。

Reader数据读一次后再读取就为空了

Reader只要执行了readxxx的任何操作,计数器就会+1。
大佬的原话如下:

Reader 只要执行了 ReadXXXX (例如:Reader.ReadString,Reader.ReadInteger )的任何操作,
计数器就会 + 1,比如 Index 0 是String,执行一个InData.Reader.Readstring,Index 就是 1。
我们按顺序写,
OutData.WriteString
OutData.WriteInteger
用InData来读就要
InData.Reader.ReadString
InData.Reader.ReadInteger
另一个方法
Indata.ReadString(0)
Indata.ReadInteger(1)
  • 难怪每次一用 DoStatus(ThInData.Reader.ReadString); 查看Client提交的查询指令之后,再用MyDM.fdqry1.Sql.Add(ThInData.Reader.ReadString);查询数据就会提示查找不到命令。又一次惯性思维坑我。

Source目录里的MM文件夹是空的???

将ZServer4D下面目录的压缩包解压进去就行了。


2.png

在客户端与ZServer4D Server端异步方式通讯无响应?

异步需要有个地方做progress处理,要把progress用起。
例如:

image.png

根据大佬的指点,我的理解是异步方式的所有操作是放到Progress里进行处理,所以需要Progress来监视。
大佬的原话如下:
progress是主循环,和application.progressmessages一样
windows中的message也是这种处理方式,差别是message会有卡机制,没有消息时,message的process会一直卡住,zs的progress永远不会卡住,其余没差别

你可能感兴趣的:(ZServer4D中踩过的坑)