// 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的字符串中。但是,当我尝试将returnsndata连接到任何东西时,不会发生连接。例如:String.Concat(returndata,“test”)返回returnsndata,returnndata +“test”也是如此。
有谁知道为什么会这样?
编辑:史蒂夫W是正确的;我后来发现了rewndata.Length总是返回8192。
答案 0 :(得分:5)
您是将它分配给字符串还是返回自身?
returndata = string.Concat(returndata, "test");
returndata += "test";
答案 1 :(得分:5)
为了扩展jhunter的答案,Concat方法不会改变原始字符串变量的内容,只是返回连接结果。如果您希望returnsndata包含连接的结果,则需要使用returndata = string.Concat(returndata, "test")
。
答案 2 :(得分:4)
我认为问题与不跟踪读取的总字节数有关。设置为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'});
另请注意,有关读取空终止符并将其包含在读取的字节中的其他建议也可能是个问题。我已经包含了一个字符串修剪,以确保删除空终止符。
答案 3 :(得分:3)
我猜错了:
收到的字符串包含'\ 0'终止符。您应该能够使用调试器检查它。
答案 4 :(得分:2)
字符串是不可变的。 这意味着,当您向字符串添加(连接)另一个字符串时,您将收到一个新的字符串实例 原始字符串本身不会被更改。