socket recieve

toadzw 2011-06-08 10:38:08
byte[] recievedata = new byte[Convert.ToInt32(lenth)];

int rellen = 0;
string rec=null;
int j = 0;

while (rellen < recievedata.Length)
{

int templen = 0;
//Thread.Sleep(200);
j++;
templen = conn.Receive(recievedata);
rellen = rellen + templen;
rec = rec + Encoding.GetEncoding("gb2312").GetString(recievedata);

}

接受的时候,我让他睡一下就能够完全接受,如果不睡的话,上面的就不能完全接受,而且rellen达到希望接受数据个数字,但实质上接过来的数据却没有那样多,费解了都
...全文
140 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
chenxi5404 2012-03-15
  • 打赏
  • 举报
回复
templen = conn.beginReceive(recievedata);
用beginReceive试试
toadzw 2011-06-08
  • 打赏
  • 举报
回复
哈哈,我只是睡下,定位问题
  • 打赏
  • 举报
回复
另外尽管你说“改成这样就可以了”,实际上你的代码是有bug的。不能接收一次字节流就进行一次编码转换,应该将所有字节接收完毕之后统一进行编码转换。
flyerwing 2011-06-08
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 sp1234 的回复:]
虽然现在软件开发的风气是滥了些,也不要随便睡啊!
[/Quote]
大虾的话很是意味深长.
大虾就是大虾.
  • 打赏
  • 举报
回复
虽然现在软件开发的风气是滥了些,也不要随便睡啊!
wangyue4 2011-06-08
  • 打赏
  • 举报
回复
tcp/ip是可信任的连接一般不会出现丢包现象
lz说的是小概率事件,以前win和unix传输遇到过。因为数据量过大在发送的时候就有可能造成接受端在处理的时候发送的数据已经超过缓冲区的大小从而造成阻赛或者抛出socketexception,所以如果只是保证发送成功的活可以在每发送一部分之后就sleep 一下,然后再发送 。

toadzw 2011-06-08
  • 打赏
  • 举报
回复
mes = Encoding.GetEncoding("gb2312").GetString(recievedata, 0, templen);改成这样就可以了
liumj2001 2011-06-08
  • 打赏
  • 举报
回复
我写是不睡的。给包编号。。

没收到就再请求 一次。
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 dazhabai 的回复:]

Receive需要时间的吧,还是sleep好吧
[/Quote]
你也是这个下判断的习惯么?
  • 打赏
  • 举报
回复
也就是说,她所谓的“就不能完全接受”根本就跟睡不睡没有关系。不知道她有没有进行测试或者调试,就下了这个判断说是“要睡才对”。
  • 打赏
  • 举报
回复
她在#1楼解释了,不睡也可以了。
dazhabai 2011-06-08
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 sp1234 的回复:]

另外尽管你说“改成这样就可以了”,实际上你的代码是有bug的。不能接收一次字节流就进行一次编码转换,应该将所有字节接收完毕之后统一进行编码转换。
[/Quote]
sp大神,怎么样能不睡?
dazhabai 2011-06-08
  • 打赏
  • 举报
回复
Receive需要时间的吧,还是sleep好吧

110,567

社区成员

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

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

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