VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 736|回复: 3

为什么我的网络文件传输程序断点调试的时候没有问题,运行就有问题了呢?

[复制链接]

2

主题

2

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-1-24 00:20:01 | 显示全部楼层 |阅读模式
        UINT dataLength;
        m_cSocket.Receive(&dataLength, 4);
                        CFile destFile("e:\\1.xls", CFile::modeCreate | CFile::modeWrite | CFile::typeBinary);
                        byte* data = new byte[dataLength];
                        m_cSocket.Receive(data, dataLength);                         destFile.Write(data, dataLength);
                        delete data;
                        destFile.Close();
                        m_cSocket.Close();
这段用来接受文件并写文件,但是在断点调试的过程中,m_cSocket.Receive(data, dataLength); 可以看到这一句的data数据是正确的,写下的文件是对的,但是一正式运行就不正确了,好象没有接受到正确的数据,写下的文件是乱码,这是怎么回事呢?
回复

使用道具 举报

0

主题

36

帖子

22.00

积分

新手上路

Rank: 1

积分
22.00
发表于 2020-2-9 18:45:01 | 显示全部楼层
m_cSocket.Receive(data, dataLength); destFile.Write(data, dataLength); 这里不能保证一次读操作就读入了dataLength长度的数据,通常要用一个循环来接受数据。
这是由TCP的传输速度决定的,在调试模式下单步执行有足够的时间让TCP传输层传送所有的数据。
回复

使用道具 举报

0

主题

2

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-2-10 14:15:01 | 显示全部楼层
在你的发送线程里添加sleep(100);
回复

使用道具 举报

0

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-9-1 17:00:01 | 显示全部楼层
1楼,请教下,TCP文件传输一般都是阻塞调用,如果m_cSocket.Receive(data,   dataLength)接收不到dataLength长度的数据,并且也没有出现错误,会返回吗?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表