首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C#字符串无法连接

C#字符串无法连接
EN

Stack Overflow用户
提问于 2009-02-13 19:54:12
回答 5查看 2.1K关注 0票数 0
代码语言:javascript
复制
// 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。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-02-13 20:19:03

我认为这个问题与没有跟踪读取的总字节数有关。设置为ReceiveBufferSize的字节缓冲区很可能大于实际读取的字节数。通过考虑实际读取的字节数,然后将其传递给Encoding.UTF8.GetString()方法,您应该可以获得一个可以连接的有效字符串。下面是一个例子:

代码语言:javascript
复制
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'});

另请注意,关于读取空终止符并将其包含在读取的字节中的另一个建议也可能是一个问题。我已经包含了字符串的修剪,以确保空的结束符被删除。

票数 4
EN

Stack Overflow用户

发布于 2009-02-13 19:56:03

你是将它赋值给一个字符串,还是返回给它本身?

代码语言:javascript
复制
returndata = string.Concat(returndata, "test");
returndata += "test";
票数 5
EN

Stack Overflow用户

发布于 2009-02-13 19:59:03

为了扩展jhunter的答案,Concat方法不会改变原始字符串变量的内容,它只返回连接后的结果。如果您希望returndata包含连接的结果,则需要使用returndata = string.Concat(returndata, "test")

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/547430

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档