Byte[] buffer = new Byte[1024];//一个1024bits的缓存区
socket.Receive(buffer);
string clientcommand = System.Text.Encoding.UTF8.GetString(buffer);这样。
clientcommand会产生 数据+"\0\0..."的值。请问有什么办法,不接收这些。
socket.Receive(buffer);
string clientcommand = System.Text.Encoding.UTF8.GetString(buffer);这样。
clientcommand会产生 数据+"\0\0..."的值。请问有什么办法,不接收这些。
直接System.Text.Encoding.UTF8.GetString(buffer).Trim('\0'),就可以了
但是你的代码有个问题, 如果socket传过的数据比较大, 超过1024, 你就接受不到剩余的字符串了.
2个方法可以解决
1. 在socket传输数据前, 先传一个长度过来, 然后根据这个长度创建你的buffer, 这样你的数据不会产生\0值, 但是不是个好办法.
2. 就生成一个1024的buffer, 然后循环读取
那如果向外传出时,如何只传有效数据。
byte[] buffer=System.Text.Encoding.UTF8.GetBytes(message.ToCharArray());
Socket.Send(buffer,buffer.Length,0);
只是没想到,这么多年来还没改掉——从flash5到现在有四年了吧楼上已经告诉你具体解决方法,我告诉你的是原因——那么也可以换别的方法,
〉1. 在socket传输数据前, 先传一个长度过来〈
做不到,因为你控制不了另外一边(那边是 flash)但是你可以在收到的内容中遇到 \0 截断(好比换行),并丢弃最后一个 \0 之后的内容
至于你传递给 flash 的数据,在后面人为加上 \0 即可不知道新的 flash 如何,我说的方法2002-2003年用过。