C# string 拼接无效(+=),找不到原因,大神们帮忙啊

cxlong89 2012-09-23 08:16:56
 private void bt_test_Click(object sender, EventArgs e)
{
IPAddress[] ipAddress = Dns.GetHostAddresses("whois.verisign-grs.com");
byte[] receiveBufferStr = new byte[1024];
IPEndPoint ipep = new IPEndPoint(ipAddress[0],43);
Socket socket = new Socket(ipep.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
string result = "";
int i = 0;


socket.Connect(ipep);
socket.Send(Encoding.ASCII.GetBytes("waihuiqq.com\r\n"));
do
{
i = socket.Receive(receiveBufferStr);
string temp = Encoding.ASCII.GetString(receiveBufferStr);
result += temp;//此处会都多次执行到,但result的值一直是第一次的值
//rtb_result.AppendText(temp);//可以得到完整的结果
} while (i > 0);
rtb_result.Clear();
rtb_result.AppendText(result);
MessageBox.Show("完成");
}


程序是相找socket收到数据存到一个字符串里,但在做拼接时得不到预期的效果。
如果是用RichTextBox.AppendText()可以得到完整的结果。
这是什么情况啊?
...全文
301 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
cxlong89 2012-09-23
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

“得不到预期的效果”这个词儿太泛泛了,谁知道你得到的真实效果是什么呢?

receiveBufferStr中只有前i个字节才是接收到的数据,你为什么要把整个receiveBufferStr都进行解码呢?
[/Quote]
谢谢sp1234,确实是这个问题,哈哈!
再请教个问题,每一次Receive操作之后就去解码会有什么问题?
  • 打赏
  • 举报
回复
另外个假设发送方不止1024个字节,或者tcp自己就将内容分多次发送,那么你执行一次socket.Receive(receiveBufferStr)也并不能保证就能得到完整的消息。真正的通讯程序的流程,只有在收到消息结束时才应该把收到的所有字节拿出来进行解码,而不是每一次Receive操作之后就去解码。
  • 打赏
  • 举报
回复
“得不到预期的效果”这个词儿太泛泛了,谁知道你得到的真实效果是什么呢?

receiveBufferStr中只有前i个字节才是接收到的数据,你为什么要把整个receiveBufferStr都进行解码呢?
cxlong89 2012-09-23
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

你把变量temp放在do循环内部,当然不行了,temp变量声明放在循环外部就可以了。

C# code

string temp = "";
do
{
i = socket.Receive(receiveBufferStr);
temp = Encoding.ASCII.GetString(receiveBufferStr);
result += te……
[/Quote]

你可能是误解了,我是要找结果拼接到result这个变量里的。
本来我temp也是放在do while的外面的,和这个没关系。
暖枫无敌 2012-09-23
  • 打赏
  • 举报
回复
你把变量temp放在do循环内部,当然不行了,temp变量声明放在循环外部就可以了。


string temp = "";
do
{
i = socket.Receive(receiveBufferStr);
temp = Encoding.ASCII.GetString(receiveBufferStr);
result += temp;
} while (i > 0);

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧