2010-12-13 13 views
0

現在、私はTCPプロジェクトサーバといくつかのデバイスに接続することを含むネットワークプロジェクトに取り組んでいます。長い間、私は正常にいくつかのデバイスモデルのためのTCPコマンドを送信し、応答を受信するための下のコードを使用しましたが、Windows Telnet Server 2003とFortigateデバイスを試すと、いくつかのキャラクターは??%?????? ?????のように設定されています。応答を受信するためのc#TcpClientは正常に接続されたTelnetサーバ/デバイスからの有効な応答を読み取ることができません

My機能は次のとおりです。

private string receive() 
    { 
     StringBuilder sbReadBuffer = new StringBuilder(); 
     bool isFinished = false; 
     NetworkStream ns = tcpClient.GetStream(); 
     DateTime lastConTime = DateTime.Now; 

     while (!isFinished) 
     { 
      if (!ns.DataAvailable) 
      { 
       Thread.Sleep(200); 

       if ((DateTime.Now - lastConTime).TotalSeconds > Prms.tcpSendReceiveTimeoutInSeconds) 
        break; 
       else 
        continue; 
      } 

      Int32 receiveCount = ns.Read(receiveBuffer, 0, receiveBuffer.Length); 
      String received = new ASCIIEncoding().GetString(receiveBuffer, 0, receiveCount); 

      sbReadBuffer.Append(received); 

      foreach (String terminaterToken in terminaterTokens) 
       if (sbReadBuffer.ToString().EndsWith(terminaterToken)) 
        isFinished = true; 

      lastConTime = DateTime.Now; 
     } 

     return sbReadBuffer.ToString(); 
    } 
} 

とTCPコネクションを構築し、受信機能を呼び出すための:

 TcpClient tcpClient = new TcpClient() 
    { 
     SendTimeout = 10000, 
     ReceiveTimeout = 10000 
    }; 

    tcpClient.Connect(wanIp, 23); 
    String initialMessage = receive(); 

私は上記のコードは問題なく動作しますデバイスのための受信したメッセージをテストし、私は最初の応答が常に "??%????????" "welcome"のような論理的な応答が続きました。

私のテストでは、プログラムがサーバー/デバイスに正常に接続されているが、有効な応答が得られないことがわかりました。これについてのアイデアは?

答えて

1

"??%??" TelnetオプションIACのためです。 IACは、IACについての255の詳しい情報は、IAC値に問題があなたがしようとすることにあるアドレス

support.microsoft.com/kb/231866

から到達することができるよりも大きな進コードを持っているとして、応答値を返しますC#れるtcpClientとの応答を解析スタンダートコードを

  byte[] sendBuffer = new ASCIIEncoding().GetBytes(str + strNewLine); 
      tcpClient.GetStream().Write(sendBuffer, 0, sendBuffer.Length); 

を使用してコードは、IAC値を受信し、上記「??%」値を生成します。

これを防止し、IACの値を処理するために、私はいくつかの調査を行い、アドレスhttp://www.codeproject.com/KB/IP/TelnetSocket.aspxで完璧にIAC値を処理する優れたtelnetプロジェクトを見つけました。

IAC値の処理についての理解を深めるために、MinimalisticTelnetライブラリのソースコードが便利です。私はMinimalisticTelnetを使用して問題なく応答を得ることができましたが、私が働いているデバイスのためにメッセージを送信するのに失敗しました。しかし、私は、MinimalisticTelnetのソースコードをより深く理解することを強くお勧めします。

関連する問題