string message =tokens[1].Trim().ToString()+"您已经成功连接。\n";大概是这样...

解决方案 »

  1.   

    这是因为你的buffer 没有添满时就以\0占位,我以前遇到过,我基本上使用replace去掉的
      

  2.   

    我刚才试了,Trim方法不行啊~~
    用replace怎么用?
      

  3.   

    谢谢,用Replace方法可以了~~谢谢 xinyulou(心雨楼) 啊!!
    同时也谢谢大家的帮助!!
      

  4.   

    serverresponse .Replace("\0","").ToString()
      

  5.   

    啊?我回复得太快了,现在补上,同时感谢yscfdavid()和xltmae(xltmae)
      

  6.   

    应该不只是你上面说到的'\0'的数量吧?是否还有更多?出现这个问题的原因是:语句:
    Byte[] buffer = new Byte[2048]; 
    定义了一个2048字节的数组,数组初始化每个元素为0,而你接收的数据总长度不到2048,所以,剩余的字节元素的值就是0了。当调用GetString的时候,系统把每个Byte数据转换为对应的asc的字符,ASC为0对应的字符是空字符('\0'),所以就有了你说的问题了。测试代码:
    byte[] bb=new byte[100];
    byte[] aa=System.Text.Encoding.Default.GetBytes("中国");
    for(int i=0;i<aa.Length;i++)
    {
    bb[i]=aa[i];
    }
    string strTmp=System.Text.Encoding.Default.GetString(bb).Trim();
    MessageBox.Show(strTmp.Length.ToString());
    MessageBox.Show(strTmp);
    MessageBox.Show(strTmp+"abc");
    在弹出消息中,第一个是98,这个我们好理解,因为汉字占两个字节,但在字符串算一个字符,但第二个弹出的内容只有两个汉字,其余的到哪里去了呢?特别第三个弹出信息同第二个完全一样,abc又到哪里了呢?这是因为:
    MessageBox.Show调用了系统的MessageBox的API函数,而系统API是用C++写的,字符串以zero结尾即以'\0'表示结尾,因此把第一个'\0'字符后面的内容全部忽略了。而在C#中,类似VB,字符串不再是使用'\0'来表示结尾了,而是使用了一个复杂的类来实现的,所以出现了你这样的问题。解决:我现在还没有找到很好的解决办法,你可以先用下面的代码:strTmp.Substring(0,strTmp.IndexOf('\0'))来删除其中多余的字符,这样可以保证与C/C++兼容。
      

  7.   

    triout(笨牛) ,谢谢啊,不好意思噢,下次补上!