【问题标题】:kbmmw Client: 64-bit request stream issuekbmmw 客户端:64 位请求流问题
【发布时间】:2020-07-27 07:15:12
【问题描述】:

我在 Delphi 10.3 IDE 上使用 64 位 kbmmw 包开发了一个客户端-服务器应用程序。 64 位客户端应用程序通过设置请求服务名称和用户名属性的 SendRequest 方法(kbmmwClient 类方法)将请求发送到服务器。 kbmmwClient 库在内部创建一个请求流(TkbmmWCustomRequestTransportStream 类),它将被发送到服务器。

tRequestStream:=TkbmMWCustomRequestTransportStream(cStreamClass.Create(FTransport,FTransport.Info));
tRequestStream.RequestID:=rid;
tRequestStream.ServiceName:=AServiceName;
tRequestStream.Username:=FUsername;
--Begin my debug-----------------
debug('InternalSendRequest - tRequestStream.ServiceName: ' + tRequestStream.ServiceName);
debug('InternalSendRequest - tRequestStream. Username: ' + tRequestStream.Username);
t := tkbmmwmemorystream(tRequestStream.DataStream);
SetString(streamstring, PAnsiChar(t.Memory), t.Size);
write_debug('InternalSendRequest - tRequestStream - DataStream: ' + streamstring);
--End my debug

这是调试结果:

14/04/2020 15:50:32.226: InternalSendRequest - tRequestStream.ServiceName: reqservice
14/04/2020 15:50:32.226: InternalSendRequest - tRequestStream. Username: ANDAPI
14/04/2020 15:50:32.227: InternalSendRequest - tRequestStream - DataStream: Ìû¯
   STANDARDü     
   r e q s e r v i c e            A N D A P I             ÿÿÿÿ        €                    

为什么服务名称 (reqservice) 和用户名 (ANDAPI) 的字符中穿插有空字符? 当我使用 32 位 kbmmwClient 时,请求流以正确的格式发送。

【问题讨论】:

    标签: delphi 64-bit delphi-10.3-rio data-stream


    【解决方案1】:

    ServiceName、UserName 和许多其他字符串作为 kbmMW 字符串流式传输。它们的流式传输方式取决于:

    1. 编译器是否支持 Unicode?​​li>
    2. 传输流版本是否 >= 300?
    3. 是否在传输流选项中设置了 mwtsoUnicodeStrings?

    如果不支持 Unicode,则发送 8 位非代码页字符串(不包含零)。 如果第 2 点和第 3 点不匹配,它也作为 8 位非代码页字符串发送(从 Unicode 进行简单的下转换)

    所以我的猜测是,如果您使用的是相同的 Delphi 版本,那么您在 32 位代码中已经专门降级了传输流版本以与旧版本的 kbmMW 兼容?

    最好的问候 金/C4D

    【讨论】:

    • 我必须将客户端传输流版本强制为250,以便它与服务器相同,后者更旧。现在它工作正常。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-03
    • 1970-01-01
    • 1970-01-01
    • 2015-03-05
    • 2016-03-14
    • 2018-10-26
    相关资源
    最近更新 更多