Я должен предоставить SSL-интерфейс для простого TCP-сервера, поэтому я делаю «насосное» приложение, которое будет обеспечивать SSL-соединение с внешней стороной, в то время как исходный сервер может оставаться простым.
IЯ пытаюсь использовать компоненты Indy для поддержки моих потребностей SSL, но я не могу получить какие-либо данные из порта SSL.Я назначил TIdTCPServer.OnExecute для следующего обработчика событий:
procedure TForm1.IdTCPServer1Execute(AContext: TIdContext);
var
c:TIdTCPClient;
cs,ss:TIdIOHandler;
b:TBytes;
begin
c:=TIdTCPClient.Create(Self);
try
c.Host:='127.0.0.1';
c.Port:=60675;
c.ConnectTimeout:=500;
c.Connect;
ss:=c.IOHandler;
cs:=AContext.Connection.IOHandler;
while (cs.Connected) and (ss.Connected) do
begin
if cs.CheckForDataOnSource(1) then
begin
try
cs.ReadBytes(b,1,False);
except on e:Exception do
Memo1.Lines.Add(e.Message); //BAD out of Thread context
end;
if Length(b)>0 then
ss.Write(b);
end;
if ss.CheckForDataOnSource(1) then
begin
ss.ReadBytes(b,1,False);
if Length(b)>0 then
cs.Write(b);
end;
end;
finally
c.Free;
end;
end;
К серверу TCP подключен обработчик SSL.Я сделал то же самое на простом HTTP-сервере, и он работал нормально, поэтому я предполагаю, что моя настройка SSL не является проблемой.
cs = Клиентская сторона (сокет сервера) и ss = Серверная сторона (клиентдля TCP-сервера, к которому я пытаюсь добавить SSL).
Теперь я знаю, что он нуждается в очистке, и ожидание в 1 мс не очень красиво, но прежде чем я смогу атаковать эту проблему, я хотел бынекоторые данные.
Ни один из моих ReadBytes не вызывается.Когда я использовал cs.Readable()
, я получил true
только один раз, но я все еще не мог прочитать.
Что я могу сделать, чтобы сделать насос?Почему я не получаю данные?