Наконец-то я получил приложение Delphi для отправки данных через прямые сокеты с библиотекой Synapse через HTTPS.
Однако у меня возникли проблемы с определением размера возвращаемых мне данных.
В настоящее время у меня есть следующий код:
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 (не уверен, что это потому, что они longInt, а я делаю IntToStr), поэтому я не думаю, что именно так я проверяю объем данных. И я также пытался использовать CanRead и CanReadEx безрезультатно.
Я хотел бы сделать что-то вроде следующего: Socket.RecvBufferStr ([длина для получения], [до получения всех данных] или 25000).
Если есть другая функция, это нормально, но я бы хотел использовать TTCPBlockSocket , так как HTTPSend и другие, которые я пробовал из синапса, не работают для моих целей.
Как я могу проверить - используя TTCPBlockSocket из библиотеки Synapse с Delphi / Pascal - сколько данных сервер возвращает мне?