使用.net进行Telnet连接

ale*_*bog 4 c# sockets telnet

我们的办公室目前使用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);
Run Code Online (Sandbox Code Playgroud)

然后我发送查询(没有例外)

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

然后我尝试收到回复

    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);
}
Run Code Online (Sandbox Code Playgroud)

每当我尝试接收响应时,我得到"一个现有的连接已被远程主机强行关闭",如果打开telnet并发送相同的查询,我立即收到回复

有什么想法或建议吗?

Chr*_*lor 5

基于您和我之间的评论交换,您似乎需要将Ascii代码19(0x13)附加到查询的末尾.