14

これは簡単ですか?良い例はありますか?私のすべてのグーグル検索は、dotNetでtelnetクライアントを作成する方法に関するアイテムを返しますが、これは私にとってやり過ぎです。私はC#でこれをやろうとしています。

ありがとう!

4

2 に答える 2

13

C# 2.0 と Telnet - 思ったほど苦痛では
ない

または、この代替リンク.

System.Net.Sockets クラスを使用する場合は、次のようにします。

  • 指定されたサーバーとポートを指す IPEndpoint を作成します。DNS.GetHostEntry をクエリして、コンピューター名を IPHostEntry オブジェクトに変更できます。
  • 次のパラメーターを使用してソケット オブジェクトを作成します: AddressFamily.InterNetwork (IP バージョン 4)、SocketType.Stream (InterNetwork および Tcp パラメーターに基づく)、ProtocolType.Tcp (信頼できる双方向接続)
  • 次のようにソケットを開きます: socket.Connect(endpoint); //そうです、それは簡単です socket.Send(... 待って、何か忘れていました。最初にデータをエンコードして、ワイヤを飛び越えることができるようにする必要があります。
  • Encoding.ASCII.GetBytes を使用して、サーバー用のナイス メッセージをバイトに変換します。次に、socket.Send を使用して、それらのバイトを途中で送信します。
  • socket.Receive を使用して (一度に 1 バイト、またはバイト配列に) 応答をリッスンします socket.Close() を呼び出してクリーンアップすることを忘れないでください

ProtocolType.Tcp を使用するように構成されたソケット パラメータが既にあるソケット オブジェクトの代わりに、System.Net.Sockets.TcpClient オブジェクトを使用することもできます。それでは、そのオプションについて説明しましょう。

  1. サーバー名とポートを取る新しい TcpClient オブジェクトを作成します (IPEndPoint は不要です)。
  2. GetStream() を呼び出して、TcpClient から NetworkStream を引き出します。
  3. Encoding.ASCII.GetBytes(string) を使用してメッセージをバイトに変換します。これで、stream.Write メソッドと stream.Read メソッドをそれぞれ使用してデータを送受信できるようになりました。ちなみに、stream.Read メソッドは受信配列に書き込まれたバイト数を返します。
  4. Encoding.ASCII.GetString(byte array) を使用して、データを人が読める形式に戻します。
  5. stream.Close() と client.Close() を呼び出して、ネットワーク管理者が怒る前に混乱を解消してください。
于 2009-06-27T19:46:14.277 に答える
4

単純なタスク (telnet のようなインターフェースを備えた特殊なハードウェア デバイスへの接続など) の場合は、ソケットを介して接続し、テキスト コマンドを送受信するだけで十分です。

実際の telnet サーバーに接続する場合は、telnet エスケープ シーケンスの処理、ターミナル エミュレーションの処理、対話型コマンドの処理などが必要になる場合があります。CodeProject の Minimalistic Telnet ライブラリ(無料) や市販の Telnet/Terminal Emulator ライブラリなど、既にテスト済みのコードを使用する( Rebex Telnetなど) を使用すると、時間を節約できます。

次のコード (この URLから取得) は、その使用方法を示しています。

// create the client 
Telnet client = new Telnet("servername");

// start the Shell to send commands and read responses 
Shell shell = client.StartShell();

// set the prompt of the remote server's shell first 
shell.Prompt = "servername# ";

// read a welcome message 
string welcome = shell.ReadAll();

// display welcome message 
Console.WriteLine(welcome);

// send the 'df' command 
shell.SendCommand("df");

// read all response, effectively waiting for the command to end 
string response = shell.ReadAll();

// display the output 
Console.WriteLine("Disk usage info:");
Console.WriteLine(response);

// close the shell 
shell.Close();
于 2010-09-02T12:09:14.463 に答える