Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用C#套接字连接Ubuntu(端口23,telnet)可以';我没有收到提示_C# - Fatal编程技术网

使用C#套接字连接Ubuntu(端口23,telnet)可以';我没有收到提示

使用C#套接字连接Ubuntu(端口23,telnet)可以';我没有收到提示,c#,C#,我是C#的新手,我只是想用C#来编写一个客户端,它将远程登录Ubuntu服务器并登录到这个服务器。我使用Putty或windows cmd登录到此服务器,响应如下所示: ------------------Welcome to syseng1-------------------- This machine is the System Engineering Automation Server ---------------------------------------------------

我是C#的新手,我只是想用C#来编写一个客户端,它将远程登录Ubuntu服务器并登录到这个服务器。我使用Putty或windows cmd登录到此服务器,响应如下所示:

------------------Welcome to syseng1-------------------- This machine is the System Engineering Automation Server -------------------------------------------------------- Ubuntu 8.04.3 LTS syseng1 login: ------------------欢迎来到syseng1-------------------- 这台机器是系统工程自动化服务器 -------------------------------------------------------- Ubuntu 8.04.3 LTS syseng1登录: 但是,当我使用C#async socket尝试登录到此服务器时,我无法接收上面显示的最后两行

这是我的密码:

 private void OnRecievedData(IAsyncResult ar)
  {
        // Get The connection socket from the callback
        Socket sock = (Socket)ar.AsyncState;

        // Get The data , if any
        int nBytesRec = sock.EndReceive(ar);

        if (nBytesRec > 0)
        {
            // Decode the received data
            //byte[] buf = Encoding.Convert(Encoding.UTF8, Encoding.UTF8, m_byBuff, 0, nBytesRec);
           // String sRecieved = Encoding.UTF8.GetString(m_byBuff, 0, nBytesRec);
           // string sRecieved = Encoding.GetEncoding("utf-8").GetString(m_byBuff, 0, nBytesRec);

            string sRecieved = "";
            for (int i = 0; i < nBytesRec; i++)
            {

                Char ch = Convert.ToChar(m_byBuff[i]);

                switch (ch)
                {
                   case '\r':
                        sRecieved += Convert.ToString("\r\n");
                        break;
                    case '\n':
                        break;
                    default:
                        sRecieved += Convert.ToString(ch);
                        break;
                }
            }

            // Console.WriteLine(sRecieved);
            strWorkingData += sRecieved;
            strFullLog += sRecieved;

            richbox.Invoke(new UpdateTextCallback(this.UpdateText), sRecieved);
            // Launch another callback to listen for data

            //AsyncCallback recieveData = new AsyncCallback(OnRecievedData);
            sock.BeginReceive(m_byBuff, 0, m_byBuff.Length, SocketFlags.None, OnRecievedData, sock);

        }
        else
        {
            // If no data was recieved then the connection is probably dead
            Console.WriteLine("Disconnected", sock.RemoteEndPoint);
            sock.Shutdown(SocketShutdown.Both);
            sock.Close();
            //Application.Exit();
        }
    }
接收数据时的私有无效(IAsyncResult ar)
{
//从回调函数获取连接套接字
Socket sock=(Socket)ar.AsyncState;
//获取数据,如果有的话
int nBytesRec=sock.EndReceive(ar);
如果(nBytesRec>0)
{
//对接收到的数据进行解码
//字节[]buf=Encoding.Convert(Encoding.UTF8,Encoding.UTF8,m_byBuff,0,nBytesRec);
//String sRecieved=Encoding.UTF8.GetString(m_byBuff,0,nBytesRec);
//string sRecieved=Encoding.GetEncoding(“utf-8”).GetString(m_byBuff,0,nBytesRec);
字符串sRecieved=“”;
对于(int i=0;i
我还尝试使用ruby查找使用socket登录此服务器时收到的确切信息。以下是我的日志:

Microsoft Windows XP [Version 5.1.2600] (C) Copyright 1985-2001 Microsoft Corp. C:\Documents and Settings\vzheng>irb irb(main):001:0> require 'socket' => true irb(main):002:0> include Socket::Constants => Object irb(main):003:0> socket = Socket.new( AF_INET, SOCK_STREAM, 0 ) => # irb(main):004:0> sockaddr = Socket.sockaddr_in( 23, '10.4.0.50' => "\002\000\000\027\n\004\0002\000\000\000\000\000\000\000\000 irb(main):005:0> socket.connect( sockaddr ) => 0 irb(main):006:0> irb(main):007:0* socket.gets => "------------------Welcome to syseng1--------------------\r\ irb(main):008:0> socket.gets => "This machine is the System Engineering Automation Server\r\ irb(main):009:0> socket.read(40) => "----------------------------------------" irb(main):010:0> socket.read(2) => "--" irb(main):011:0> socket.read(2) => "--" irb(main):012:0> socket.read(2) => "--" irb(main):013:0> socket.read(2) => "--" irb(main):014:0> socket.read(2) => "--" irb(main):015:0> socket.read(2) => "--" irb(main):016:0> socket.read(2) => "--" irb(main):017:0> socket.read(2) => "--" irb(main):018:0> socket.read(2) => "\r\n" irb(main):019:0> socket.read(2) => "\377\375" irb(main):020:0> socket.read(1) => "'" irb(main):021:0> socket.read(1) (hang there)... Microsoft Windows XP[版本5.1.2600] (C) 版权所有1985-2001微软公司。 C:\Documents and Settings\vzheng>irb irb(主):001:0>需要“插座” =>正确 irb(主):002:0>包含套接字::常量 =>对象 irb(main):003:0>socket=socket.new(AF\u INET,SOCK\u STREAM,0) => # irb(主):004:0>sockaddr=Socket.sockaddr_英寸(23,'10.4.0.50' =>“\002\000\000\027\n\004\0002\000\000\000\000\000\000\000\000\000 irb(主):005:0>socket.connect(sockaddr) => 0 irb(主要):006:0> irb(主):007:0*socket.get =>“--------------欢迎使用syseng1-------------------\r\ irb(main):008:0>socket.get =>“此计算机是系统工程自动化服务器\r\n\ irb(主):009:0>插座。读取(40) => "----------------------------------------" irb(主):010:0>插座。读取(2) => "--" irb(主):011:0>套接字。读取(2) => "--" irb(主):012:0>插座。读取(2) => "--" irb(主):013:0>插座。读取(2) => "--" irb(主):014:0>套接字。读取(2) => "--" irb(主):015:0>套接字。读取(2) => "--" irb(主):016:0>插座。读取(2) => "--" irb(主):017:0>套接字。读取(2) => "--" irb(主):018:0>套接字。读取(2) =>“\r\n” irb(主):019:0>socket.read(2) => "\377\375" irb(主):020:0>插座。读取(1) => "'" irb(主):021:0>插座。读取(1) (挂在那里)。。。 因此,无论是c#还是ruby中的socket,我只能接收前三行,但无法接收后续行

Ubuntu 8.04.3 LTS syseng1 login: Ubuntu 8.04.3 LTS syseng1登录: 你们能告诉我一些关于这个问题的想法吗?

Telnet是一个协议(正如你们的
所证明的那样“\002\000\000\027\n\004\0002\000\000\000\000\000\000\000\000\000”
输出)。这意味着登录提示不会自动出现。通常,发送一个(或两个)回车会得到登录提示,但可能会出现(或可能不)是该议定书的一部分


换句话说,您需要实现telnet协议才能实现此功能。

非常感谢您的回复。但我尝试发送回车。仍然没有任何响应。因此,这意味着我不知道何时应该将用户名和密码发送到服务器。我还使用Tcl登录到同一服务器,发现服务器响应使用PrompExpect“login”登录,尝试10.4.0.50…连接到10.4.0.50。转义字符为“^]”。欢迎使用syseng1------------------此计算机是系统工程自动化服务器-------------------------------------------------------Ubuntu 8.04.3 LTS syseng1登录:%set expect\u out(缓冲区)正在尝试10.4.0.50…连接到10.4.0.50。转义字符为“^]”。-------------欢迎使用syseng1------------------这台机器是系统工程自动化服务器-------------------------------------------Ubuntu 8.04.3 LTS syseng1 loginalso,搜索“expect”,您会发现它适用于许多进程这对编写程序没有帮助