2016-12-30 12 views
-2

特定のリモートサーバーがあります。私は手順がAReadLinesCountを、指定するパラメータが必要です 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; 

彼から

を答えを取得したいそうでないプログラムが

+0

文脈がありません。 AReadLinesCountとは何ですか?明確にするために質問を編集してください。 –

+0

それについて考えてみてください。受信者は、どのくらいのデータを読むべきかを知っていますか?受信者は、どのくらいの数の行を読むかを推測することができます。その情報はコンテンツと同様に渡されなければならない。それは私がライン指向の方法を使用しないだろうか?私はいくつかのエンコーディングを使ってテキストをバイトに変換します。 UTF8。それから、バイト数の後にバイト数を続けて送ります。 –

+0

サイドノートでは、 'IndyTextEncoding(IdTextEncodingType.encOSDefault))'を 'IndyTextEncoding_OSDefault'に簡略化することができます。 –

答えて

0
を受けどのように AReadLinesCount回答から

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

を応答を停止します

サーバーは、クライアントに読み取りを停止するときに通知する必要があります。それができる方法は2つあります。

  1. これは、回線自体を送信する前に回線数を送信できます。番号を最初に読んで、それに続く指定された行数を読みます。

  2. 回線を送信した後で、固有の終端デリミタを送信できます。ターミネータに達するまで、ループ内の行を読み込みます。

はあなたが実装しようとしているプロトコルについての詳細情報を提供していないので、誰もが正確にこの作品を作るためにあなたのコード内で何を書くためにあなたにを伝えることができます。

+0

100. [TBBC]マスタサーバーバージョン0.5.6.101.25。 Tere 25 - 行数、しかし1つ以上 – Shouldercannon

+0

@ Shouldercannonその情報は完全に役に立たない。何を言おうとしているのですか?サーバーの**バージョン**は重要ではありませんが、重要なのはサーバーが通信に使用する**プロトコル**です。あなたはそのプロトコルに関する情報を提供していません。どのように通信するのかわからないときに、どのようにサーバーと通信することを期待していますか?とにかく、どんなサーバーですか? –