// Reads NetworkStream into a byte buffer.
NetworkStream ns;
System.Net.Sockets.TcpClient client = new TcpClient();
byte[] receiveBytes = new byte[client.ReceiveBufferSize];
ns.Read(receiveBytes, 0, (int)client.ReceiveBufferSize);
String returndata = Encoding.UTF8.GetString(receiveBytes);我成功地从客户端读取数据,并将结果存储到一个名为returndata的字符串中。但是,当我尝试将returndata与任何内容连接起来时,不会发生连接。例如: String.Concat( returndata,"test")返回returndata,就像returndata+ "test“一样。
有人知道为什么会这样吗?
编辑: Steve W是正确的;我后来发现returndata.Length总是返回8192。
发布于 2009-02-13 20:19:03
我认为这个问题与没有跟踪读取的总字节数有关。设置为ReceiveBufferSize的字节缓冲区很可能大于实际读取的字节数。通过考虑实际读取的字节数,然后将其传递给Encoding.UTF8.GetString()方法,您应该可以获得一个可以连接的有效字符串。下面是一个例子:
NetworkStream ns;
System.Net.Sockets.TcpClient client = new TcpClient();
byte[] receiveBytes = new byte[client.ReceiveBufferSize];
int bytesRead = ns.Read(receiveBytes, 0, receiveBytes.Length);
String returndata = Encoding.UTF8.GetString(receiveBytes,0,bytesRead);
returndata = returndata.Trim(new char[] {'\0'});另请注意,关于读取空终止符并将其包含在读取的字节中的另一个建议也可能是一个问题。我已经包含了字符串的修剪,以确保空的结束符被删除。
发布于 2009-02-13 19:56:03
你是将它赋值给一个字符串,还是返回给它本身?
returndata = string.Concat(returndata, "test");
returndata += "test";发布于 2009-02-13 19:59:03
为了扩展jhunter的答案,Concat方法不会改变原始字符串变量的内容,它只返回连接后的结果。如果您希望returndata包含连接的结果,则需要使用returndata = string.Concat(returndata, "test")。
https://stackoverflow.com/questions/547430
复制相似问题