2016-12-30 10 views
-2

Существует определенный удаленный сервер. Я хочу, чтобы получить ответ от негоКак получить AReadLinesCount IdTCPClient

procedure TForm1.Button1Click(Sender: TObject); 
begin 
    Memo1.Clear; 

    IdTCPClient1.Host := '163.158.182.243'; 
    IdTCPClient1.Port := 28900; 
    IdTCPClient1.Connect; 
end; 

procedure TForm1.IdTCPClient1Connected(Sender: TObject); 
begin 
    IdTCPClient1.IOHandler.Write('001'); 
    IdTCPClient1.IOHandler.ReadStrings(Memo1.Lines, 25, IndyTextEncoding(IdTextEncodingType.encOSDefault)); 
end; 

Процедура требует параметр, чтобы указать AReadLinesCount, в противном случае программа перестает отвечать на запросы

procedure TIdIOHandler.ReadStrings(ADest: TStrings; AReadLinesCount: Integer = -1; 
    AByteEncoding: IIdTextEncoding = nil 
    {$IFDEF STRING_IS_ANSI}; ADestEncoding: IIdTextEncoding = nil{$ENDIF} 
); 

Как AReadLinesCount из полученных ответов

+0

У нас нет контекста. Что такое AReadLinesCount. Пожалуйста, отредактируйте вопрос, чтобы уточнить. –

+0

Подумайте об этом. Как получатель узнает, сколько данных нужно читать? Как получатель может просто угадать, сколько строк читать. Эта информация должна быть передана, а также контент. Если бы это я, я бы не использовал метод, ориентированный на линию. Я бы преобразовал текст в байты, используя некоторую кодировку, например. UTF8. Затем я отправил количество байтов, за которыми следуют сами байты. –

+0

На стороне примечание 'IndyTextEncoding (IdTextEncodingType.encOSDefault))' можно упростить до 'IndyTextEncoding_OSDefault'. –

ответ

0

Сервер должен сообщить вашему клиенту, когда прекратить чтение. Это можно сделать двумя способами:

  1. Он может отправлять количество строк перед отправкой самих линий. Сначала вы должны прочитать номер, а затем прочитать указанное количество строк.

  2. После отправки линий он может отправить уникальный разделитель. Вы будете читать строки в цикле, пока не достигнете терминатора.

Вы не предоставили никаких сведений о протоколе, который вы пытаетесь осуществить, так никто не может сказать вам точно что написать в своем коде, чтобы сделать эту работу.

+0

100. [TBBC] Master Server Version 0.5.6.101.25. Tere 25 - количество строк, но более одного – Shouldercannon

+0

@ Невозможно использовать эту информацию совершенно бесполезно. Что ты пытаешься сказать? ** версия ** сервера не важна, важно, чтобы ** протокол **, используемый сервером для связи. Вы не предоставили никакой информации об этом протоколе. Как вы рассчитываете общаться с сервером, когда вы не знаете, КАК оно общается? Что это за сервер? –