【问题标题】:Connection Timed Out + SSL Connection + TCPIP + Indy10.5.5连接超时 + SSL 连接 + TCPIP + Indy10.5.5
【发布时间】:2012-10-16 14:45:16
【问题描述】:

我开发了一个应用程序,用于使用 SSL 使用 TCP/IP 组件将文件客户端发送到服务器。

在服务器端发送大文件时发生Connection Timed Out错误

服务器端 (SSL)

   idTCPServer1.IOHandler := IdServerIOHandlerSSLOpenSSL1;
   OnExecute
      Acontext.Connection.IOHandler.LargeStream := True;
      Acontext.Connection.IOHandler.ReadStream(filestream,Filesize);  // Error is occurred here.
   End;

客户端 (SSL)

   idTCPClient1.IOHandler := IdSSLIOHandlerSocketOpenSSL1;
   idTCPClient1.IOHandler.LargeStream := True;
   idTCPClient1.IOHandler.WriteStream(fms,-1,True);

客户端和服务器之间建立连接。一段时间后发送文件时,连接超时错误会显示在服务器和客户端应用程序将无响应。

这里的另一种情况是,当我使用 IdIOHandlerStack1(在客户端)正常连接客户端和服务器时,服务器端没有分配任何处理程序。文件传输成功,没有任何问题。

我用的是Delphi2010 & Indy10.5.5,DLL版本是0.9.8.18

任何人都可以指导我

【问题讨论】:

    标签: delphi openssl delphi-2010 indy


    【解决方案1】:

    没有WriteStream() 方法,而是Write() 方法的TStream 重载。

    您告诉Write() 将流大小作为 64 位整数发送,但您没有告诉ReadStream() 读取流大小,因此您可能事先使用 @ 读取了完整的 64 位文件大小987654328@,对吗?

    此外,10.5.5 是 Indy 的过时版本。当前版本是 10.5.9。 Try upgrading 以确保您拥有所有最新的错误修复等,如果仍有问题,请报告。

    【讨论】:

    • 我在客户端(WriteStream)错误地提到了错误的声明。首先,我从客户端发送实际文件大小。这在上面的代码中没有提到。在服务器上获取文件大小后,我编写了这样的代码Acontext.Connection.IOHandler.ReadStream(filestream,Filesize);。在客户端 idTCPClient.IOHandler.Write(tempStream,-1,True)
    • FileSize 只是一个 Int64 数据类型
    • 我从 (svn.atozed.com:444/svn/Indy10) 下载 Indy10.5.9。当我尝试将 Indy 10.5.9 的 System140.dproj 编译到 Delphi2010 中时。由于以下错误未编译的标识符 LONG(在 1851 行),在 {$EXTERNALSYM _RIORESULT} _RIORESULT = record Status : **LONG**; BytesTransferred : ULONG; SocketContext : ULONGLONG; RequestContext : ULONGLONG; end; 声明中)和 PVOID(在第 2627 行),在`_RIO_NOTIFICATION_COMPLETION_IOCP = 记录IocpHandle:手柄; CompletionKey : PVOID;重叠:PVOID;结尾; `
    • “首先我从客户端发送实际文件大小” - 你是手动做的吗?因为您告诉Write() 通过将其AWriteByteCount 参数设置为True 来发送文件大小,所以您实际上是两次发送文件大小吗? ReadStream() 能够为您读取文件大小(事实上,这是它的默认行为),因此您不必手动进行。 IOHandler.Write(fms, 0, True)IOHandler.ReadStream(filestream, -1, False).
    • Indy 中没有声明 _RIO... 类型。什么文件在抱怨他们?它不能是 Indy 文件。
    猜你喜欢
    • 2013-12-07
    • 1970-01-01
    • 2011-12-05
    • 1970-01-01
    • 1970-01-01
    • 2022-01-21
    • 1970-01-01
    • 2010-09-23
    • 2012-02-25
    相关资源
    最近更新 更多