Byte[] buffer = new Byte[1024];//一个1024bits的缓存区 
socket.Receive(buffer);
string clientcommand = System.Text.Encoding.UTF8.GetString(buffer);这样。
clientcommand会产生 数据+"\0\0..."的值。请问有什么办法,不接收这些。

解决方案 »

  1.   

    \0\0是你初始化Byte[] buffer = new Byte[1024];给buffer赋予的默认值, 如果不到1024位长, 后面的部分就会出现\0\0值, 所以你接收的并不是这些
    直接System.Text.Encoding.UTF8.GetString(buffer).Trim('\0'),就可以了
    但是你的代码有个问题, 如果socket传过的数据比较大, 超过1024, 你就接受不到剩余的字符串了. 
    2个方法可以解决
    1. 在socket传输数据前, 先传一个长度过来, 然后根据这个长度创建你的buffer, 这样你的数据不会产生\0值, 但是不是个好办法.
    2. 就生成一个1024的buffer, 然后循环读取
      

  2.   

    真是高手呀。
    那如果向外传出时,如何只传有效数据。
    byte[] buffer=System.Text.Encoding.UTF8.GetBytes(message.ToCharArray());
    Socket.Send(buffer,buffer.Length,0);
      

  3.   

    呵呵,我印象中 flash 的 xmlsocket 会自动加上 \0,并且要求你发送的数据以 \0 结束——这是一个古老的错误,延续了以前传统的网络编程和 C/C++ 字符数组的习惯
    只是没想到,这么多年来还没改掉——从flash5到现在有四年了吧楼上已经告诉你具体解决方法,我告诉你的是原因——那么也可以换别的方法,
    〉1. 在socket传输数据前, 先传一个长度过来〈 
    做不到,因为你控制不了另外一边(那边是 flash)但是你可以在收到的内容中遇到 \0 截断(好比换行),并丢弃最后一个 \0 之后的内容
    至于你传递给 flash 的数据,在后面人为加上 \0 即可不知道新的 flash 如何,我说的方法2002-2003年用过。
      

  4.   

    Sorry, 我不知道flash中如何发送socket的, 给了你一个错误的解释.