C# Telnet不发送数据

C# Telnet不发送数据,c#,telnet,C#,Telnet,我正在尝试将数据传递到telnet服务器。 我会收到登录凭据的初始提示,但不会使用用户名。 我需要传递用户名,等待密码提示并输入。 然后能够发送和接收数据,始终保持套接字打开 我的代码看起来是这样的(因为我首先在控制台中尝试它,所以比较粗糙) 我得到了登录提示,但一切都停止了 任何帮助都很好。一次发送并不等于一次接收。你需要一些方法来告诉自己你在“消息的结尾”(可能是换行符)。有关一些学习材料,请参阅 您将需要参考telnet协议,但可能需要继续阅读,直到您在检查文本之前阅读换行。您可能希望使用

我正在尝试将数据传递到telnet服务器。 我会收到登录凭据的初始提示,但不会使用用户名。 我需要传递用户名,等待密码提示并输入。 然后能够发送和接收数据,始终保持套接字打开

我的代码看起来是这样的(因为我首先在控制台中尝试它,所以比较粗糙)

我得到了登录提示,但一切都停止了


任何帮助都很好。

一次发送并不等于一次接收。你需要一些方法来告诉自己你在“消息的结尾”(可能是换行符)。有关一些学习材料,请参阅


您将需要参考telnet协议,但可能需要继续阅读,直到您在检查文本之前阅读换行。您可能希望使用
var sr=new StreamReader(networkStream,Encoding.ASCII)
sr.ReadLine()
来读取字符串,而不是手动调用
networkStream.read
并使用
Encoding.ASCII.GetString
进行解码。

这就像一个魔咒

 while(Connected == false)
            {
                byte[] data = new byte[1024];
                int size = networkStream.Read(data, 0, data.Length);
                recieved = Encoding.ASCII.GetString(data, 0, size);
                Console.WriteLine(recieved);

                 if (recieved.Contains("login"))
                        {
                             login = string.Format("{0}\r\n",user);
                             Console.WriteLine("user request found:{0}", login);
                        }
                 else if (recieved.Contains("password"))
                 {
                     login = string.Format("{0}\r\n",pass);
                     Console.WriteLine("password request found:{0}", login);
                 }
                 else if (recieved.Contains("GNET"))
                 {
                     Console.WriteLine(recieved);
                     Connected = true;
                 }

                 byte[] loginBuffer = Encoding.ASCII.GetBytes(login);

                 networkStream.Write(loginBuffer, 0, loginBuffer.Length);
                 networkStream.Flush();


            }

在Write()之后添加一个“networkStream.Flush();”您需要什么类型的返回\r或\n或\r\n执行此建议的测试:
 while(Connected == false)
            {
                byte[] data = new byte[1024];
                int size = networkStream.Read(data, 0, data.Length);
                recieved = Encoding.ASCII.GetString(data, 0, size);
                Console.WriteLine(recieved);

                 if (recieved.Contains("login"))
                        {
                             login = string.Format("{0}\r\n",user);
                             Console.WriteLine("user request found:{0}", login);
                        }
                 else if (recieved.Contains("password"))
                 {
                     login = string.Format("{0}\r\n",pass);
                     Console.WriteLine("password request found:{0}", login);
                 }
                 else if (recieved.Contains("GNET"))
                 {
                     Console.WriteLine(recieved);
                     Connected = true;
                 }

                 byte[] loginBuffer = Encoding.ASCII.GetBytes(login);

                 networkStream.Write(loginBuffer, 0, loginBuffer.Length);
                 networkStream.Flush();


            }