我终于使用Synapse库通过HTTPS让我的Delphi应用程序发送数据了。
但是,我无法确定返回给我的数据的大小。
目前,我的代码如下:
Socket := TTCPBlockSocket.Create;
status := TStringList.Create;
status.Append('LineBuffer length: ' + IntToStr(Length(Socket.LineBuffer)));
status.Append('Waiting bytes: ' + IntToStr(Socket.WaitingDataEx));
status.Append('recvBufferStr: ' + CRLF + Socket.RecvBufferStr(240, 25000) );
status.Append('LastError = ' + Socket.LastErrorDesc);
status.Append('Error code: ' + IntToStr(Socket.LastError));
Memo1.Lines.AddStrings(status);
我在Memo1中得到以下内容:
socket lastError = 0
LineBuffer length: 0
Waiting bytes: 0
recvBufferStr:
HTTP/1.1 200 OK
Date: Thu, 22 Dec 2011 01:06:07 GMT
Server: Apache
Content-Length: 237
Connection: close
Content-Type: text/plain; charset=utf-8
[***The returned Data***]
如果Socket.RecvBufferStr的第一个参数(要接收的长度)太大,我会收到winsock错误10054,因为尽管服务器已经发送完数据,但我仍在等待数据。
如果它太短,几乎总是如此,那么我只会收到指定数量的数据。
等待字节和行缓冲区长度显示为0(不确定是否因为它们是长整数并且我正在使用IntToStr),所以我认为这不是检查数据量的方法。我也尝试使用CanRead和CanReadEx,但没有成功。
我想做类似下面的事情:Socket.RecvBufferStr([要接收的长度],[直到接收所有数据]或25000)。
如果有另一个函数可以使用,那也没关系,但我想坚持使用TTCPBlockSocket,因为我从synapse中尝试的HTTPSend和其他函数不能满足我的需求。 如何使用Delphi/Pascal中的Synapse库的TTCPBlockSocket套接字检查服务器返回给我多少数据?