Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi kbmmw客户端:64位请求流问题_Delphi_64 Bit_Delphi 10.3 Rio_Data Stream - Fatal编程技术网

Delphi kbmmw客户端:64位请求流问题

Delphi kbmmw客户端:64位请求流问题,delphi,64-bit,delphi-10.3-rio,data-stream,Delphi,64 Bit,Delphi 10.3 Rio,Data Stream,我在Delphi10.3IDE上使用64位kbmmw包开发了一个客户机-服务器应用程序。 64位客户端应用程序通过设置请求服务名称和用户名属性的SendRequest方法(kbmmwClient类方法)将请求发送到服务器。 kbmmwClient库在内部创建一个请求流(TkbmMWCustomRequestTransportStream类),该请求流将被发送到服务器 tRequestStream:=TkbmMWCustomRequestTransportStream(cStreamClass.C

我在Delphi10.3IDE上使用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位kbmMW客户端时,请求流以正确的格式发送。

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

  • 编译器支持Unicode吗
  • 传输流版本>=300吗
  • mwtsoUnicodeStrings是否在传输流选项中设置
  • 如果不支持Unicode,则发送8位非代码页字符串(不带零)。 如果第2点和第3点不匹配,它也将作为8位非编码页字符串发送(从Unicode进行简单的下转换)

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

    致意
    Kim/C4D

    我必须强制将客户端传输流版本设置为250,以便它与旧的服务器相同。现在它工作得很好。谢谢