簡體   English   中英

使用.net進行Telnet連接

[英]Telnet connection using .net

我們的辦公室目前使用telnet查詢外部服務器。 程序是這樣的。

  1. 連接 - telnet opent 128 ........ 25000
  2. 查詢 - 我們粘貼查詢然后點擊alt + 019
  3. 響應 - 我們在telnet窗口中以文本形式接收響應

所以我正在嘗試使用ac#app自動進行此查詢。 我的代碼如下

首先是連接。 (沒有例外)

    SocketClient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
    String szIPSelected = txtIPAddress.Text;
    String szPort = txtPort.Text;
    int alPort = System.Convert.ToInt16(szPort, 10);

    System.Net.IPAddress remoteIPAddress = System.Net.IPAddress.Parse(szIPSelected);
    System.Net.IPEndPoint remoteEndPoint = new System.Net.IPEndPoint(remoteIPAddress, alPort);
    SocketClient.Connect(remoteEndPoint);

然后我發送查詢(沒有例外)

    string data ="some query";
    byte[] byData = System.Text.Encoding.ASCII.GetBytes(data);
    SocketClient.Send(byData);

然后我嘗試收到回復

    byte[] buffer = new byte[10];
    Receive(SocketClient, buffer, 0, buffer.Length, 10000);
    string str = Encoding.ASCII.GetString(buffer, 0, buffer.Length);
    txtDataRx.Text = str;

public static void Receive(Socket socket, byte[] buffer, int offset, int size, int timeout)
{
  int startTickCount = Environment.TickCount;
  int received = 0;  // how many bytes is already received
  do
  {
    if (Environment.TickCount > startTickCount + timeout)
      throw new Exception("Timeout.");
    try
    {
      received += socket.Receive(buffer, offset + received, size - received, SocketFlags.None);
    }
    catch (SocketException ex)
    {
      if (ex.SocketErrorCode == SocketError.WouldBlock ||
          ex.SocketErrorCode == SocketError.IOPending ||
          ex.SocketErrorCode == SocketError.NoBufferSpaceAvailable)
      {
        // socket buffer is probably empty, wait and try again
        Thread.Sleep(30);
      }
      else
        throw ex;  // any serious error occurr
    }
  } while (received < size);
}

每當我嘗試接收響應時,我得到“一個現有的連接被遠程主機強行關閉”,如果打開telnet並發送相同的查詢,我立即收到回復

有什么想法或建議嗎?

基於您和我之間的評論交換,您似乎需要將Ascii代碼19(0x13)附加到查詢的末尾。

一般來說,使用Wireshark等網絡分析工具(嗅探器)可以輕松解決此類問題。

更具體地,telnet協議包括在會話開始時的協商步驟。 我猜你如果忽略這一點,主人就不高興了。 在成功的telnet連接上使用Wireshark將向您顯示您缺少的內容。

下面是一個telnet庫的示例,以及一個使用它登錄Cisco路由器並下載IOS配置的程序。

http://www.xpresslearn.com/networking/code/csharp-telnet-client

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM