首页 新闻 搜索 专区 学院

关于socket包接收的问题

0
悬赏园豆:50 [已解决问题] 解决于 2013-07-03 16:12

写了个socket的小程序,在发送稍微大点的文件的时候会出现接收不全的情况,不知道应该叫断包或者丢包,看了网上说的tcp没有丢包这回事,但是自己可能理解能力的问题还是搞不明白,特来此一问,希望能得到帮助;下面是我截的几张图:

数据小的时候无论图片、文字都能通信,只要稍微大了一小点,数据就接收不全,但是如果设断点调试的话又能都接收到了,对于这方面实在不懂,可能描述的不太好,但是问题应该很清楚,所以请大家帮忙看看,先谢过了

附上我接收的代码:

 public static byte[] UnpackingMessage(Socket socket)
        {
            Byte[] receiveBytes = new Byte[1024];
            try
            {
                List<Byte> receiveList = new List<byte>();
                Int32 receiveCount = 0;//每次receive的数据长度
                do
                {
                    receiveCount = socket.Receive(receiveBytes, receiveBytes.Length, 0);
                    Byte[] bytes = new Byte[receiveCount];
                    Buffer.BlockCopy(receiveBytes, 0, bytes, 0, receiveCount);
                    receiveList.AddRange(bytes);
                } while (socket.Available > 0);

                Byte[] lenBytes = receiveList.GetRange(1, 7).ToArray();
                int len = Convert.ToInt32(Encoding.UTF8.GetString(lenBytes), 16);
                if (len == (receiveList.Count - 8))
                {
                    receiveList.RemoveRange(1, 7);
                    Byte[] objBytes = receiveList.ToArray();
                    return objBytes;
                }
                else
                {
                    return null;
                }
                
                
            }
            catch (SocketException ex)
            {
                socket.Close();
                return null;
            }
}
接收代码
DoNetCoder的主页 DoNetCoder | 初学一级 | 园豆:3
提问于:2013-06-21 14:54
< >
分享
最佳答案
0

断点调试能够成功。说明,是可以成功的。

猜测:你程序的后续处理,在包还没有接收完成就去操作了。

  断点调试的时候,给了足够的时间,包接受完成。

收获园豆:23
在大地画满窗子 | 初学一级 |园豆:102 | 2013-06-21 17:29
其他回答(2)
0

TCP方式下不会丢包,这个底层操作系统就给你保证了。

估计你采取的是非阻塞的方式读取的,读的时候对方还没有发送数据呢。

收获园豆:23
天方 | 园豆:5375 (大侠五级) | 2013-06-21 19:48
0

这个小程序能提供 源码吗??!!!

很需要,学习学习!!

收获园豆:4
二十三号同学 | 园豆:964 (小虾三级) | 2013-06-22 12:44

现在还有很多问题没解决,所以代码写的乱糟糟的,等我弄的稍微能看点的时候再发给你吧(留个邮箱吧)

支持(0) 反对(0) DoNetCoder | 园豆:3 (初学一级) | 2013-06-24 09:38

@那年的那年: 19442851@163.com  太感谢了!!

支持(0) 反对(0) 二十三号同学 | 园豆:964 (小虾三级) | 2013-06-24 10:03
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册