我写了个服务端程序 用户可以用telnet远程登录 要输入用户名和密码 
但是telnet每次只发送一个字符  服务端如何取得全部的用户名啊
怎么向客户端发送汉字啊 private static void ServiceClient()
        {
            Socket client = clientSocket;
            bool keepalive = true;
            byte[] bytes = new Byte[1024];
            string name,pwd;
            int bytelen;
            Byte[] message = System.Text.Encoding.ASCII.GetBytes("Please Enter UserName:\r\n");
            client.Send(message);
            bytelen=client.Receive(bytes);
            name = Encoding.ASCII.GetString(bytes, 0, bytelen);//获得用户名
            message = System.Text.Encoding.ASCII.GetBytes("\r\nPlease Enter Password:\r\n");
            client.Send(message);
            bytelen=client.Receive(bytes);
            pwd = Encoding.ASCII.GetString(bytes, 0, bytelen);//获得密码            Console.WriteLine(name + "  " + pwd + "\n");
            while (keepalive)
            {
               
            }
        }

解决方案 »

  1.   

    参考这个帖子...
    http://topic.csdn.net/u/20090729/09/dcdb5347-4e0d-4abc-910e-62e8f87b010f.html汉字是不可能转换为ASCII码的...
      

  2.   

    bytelen=client.Receive(bytes);
    ----------------------------
    从网络上接收数据不是这么接收的,你不能假设对方一次发送的数据正好是你这儿可以接收的。
    一般来说,读取数据的时候,应该循环读取直到无数据可读,如果是应答式的传送,检查读到的是否是一次数据,如果不是应答式的,自己分离数据。
      

  3.   

     Encoding.ASCII你这个编码的问题UTF-8编码
      

  4.   


    谢谢!这段话解决了主要的问题!~请问 
    while (true) {
        bytes = new byte[1024];
        int bytesRec = handler.Receive(bytes);
        data += Encoding.ASCII.GetString(bytes,0,bytesRec);
        if (data.IndexOf("<EOF>") > -1) { //如果以回车作为输入的结束 ,break的条件应该是什么?
            break;
        }
    }
      

  5.   

    以回车作为结束标志,这个你得确定客户端一定会发送这样的字符序列,0x0A 0x0D,顺序我不能确定。
      

  6.   

    汉字是不能用ASCII编码的,可以用BigEndianUnicode和Unicode来编码;一次只能收到一个字符的话,那你就循环收啊,再加一个结束符,看到结束符就表示收完了。
      

  7.   

    结束符如果自己定义为<EOF>等类似的那样会很不方便的啊这个应该是初学者都会碰到的问题吧 大家当时是怎么解决的啊
      

  8.   

                while (true)
                {
                    int bytesRec = client.Receive(bytes);
                    name += Encoding.ASCII.GetString(bytes, 0, bytesRec);
                    if (name.IndexOf("\r\n") > -1)
                    {
                        name.Remove(name.IndexOf("\r\n"));
                        break;
                    }
                }
    貌似这样就可以解决了
      

  9.   

    编写的一个服务端,通过windows自带telnet服务连接进行远程操作,在服务端接收账号密码判断登陆,为了保密密码,于是发送IAC will ECHO到客户端,禁止其回显,这一目的是达到了,但是服务端再发送IAC wont ECHO想重新打开他的回显功能却没有效果 为什么会这样呢?怎么解决? 服务器负责回显是怎么实现的?要我们手动编程send一个消息给客户端吗? 
    客户端负责回显是怎么回事?只是将输入输出到显示器? 
      

  10.   

    对于Telnet的命令序列我不了解。