自己写了一个,但是传小文件没问题,传大文件就出错,传电影传了50M就报错,或者几M就报错,
谁有写过大文件传输的程序帮忙给个,或者把技术难点及解决方法说下也可以。谢谢。
谁有写过大文件传输的程序帮忙给个,或者把技术难点及解决方法说下也可以。谢谢。
解决方案 »
- 屏幕取词 hook ExtTextOutW、BitBlt函数,如何获得正确的文本设备坐标
- 用vc6.0做了一个对话框程序,怎样才能按Enter键后窗口不关闭?
- 请教 怎样将ListCtrl中的内容存储到数据库中?然后再将数据库中的数据在ListCtrl中显示出来?
- pdf文件中的字体处理问题?
- SDK开发是不是就是用API?
- 请问如何得到某一路径下的所有文件夹的名字和创建时间
- seticon的問題?
- 不通过键盘,不通过初始化,不用SetWindowText(),如何向一个编辑控制加字符串
- 关于网络编程的小问题
- 不可思议!!!!不可思议,一个关于数据采集的源程序费解!!!<仅有的171分都给你!!!>
- CHtmlView如何获得ScriptErrorsSuppressed属性?
- onpiant函数
http://www.codeproject.com/KB/IP/SocketFileTransfer.aspx
你可以看我另一个帖子,附上代码了,不过还没解决问题
http://topic.csdn.net/u/20091022/15/932432b6-af40-45e4-845c-9de2c60355ad.html
如果是TCP,应该不会有这个问题~~
这里有主要的代码是tcp的 现在也在看这方面的资料。调试的话不好调的啊,都是发送了一段时间出的问题。
不可能断点跟踪的啊
看了上面的演示代码,和我的区别就是发送和接收的时候设了保护,根据函数返回值
做了判断,我想问题也应该是出在这里,毕竟按1000字节一次次的传,传大文件是要
传几十万次的,socket函数出问题的概率也大了,不过就算少传了或少读了怎么程序
出错呢?应该是最后接收的文件有问题吧! 谁能解释下? 解释出来的就结贴给分了。
struct A
{
int a;
BYTE buf[1000];
}A a[3];当我传送数据的时候,a[1]到达了 a[2]的前一部分到达了 a[3]到达了, a[2]的后一部分
到达了。 会出现这种情况吗??(每次都是发送一个A结构)
{
int sendcount = 0;
int count = SIZE_CFileData; // 结构体的大小,即一个包的长度
do
{
sendcount = sock->SendMsg(&m_Data + sendcount,count);
count -= sendcount;
} while(count > 0);
}void CFileRDlg::ReceiveData(CMysock *sock)
{
int Recount = 0;
int count = SIZE_CFileData; // 结构体的大小,即一个包的长度
do
{
Recount = sock->ReceiveMsg(&m_Data + Recount,count);
count -= Recount;
} while(count > 0);
}m_Data 是类成员。一个如下的结构体
struct CFileData
{
int Msg;
int count;
BYTE buf[1000];
};这是我修改以后接收和发送的函数,考虑了一次没发完或没接完的情况。这样如果没发完或
没接收完整都会继续发剩下的或接收剩下的。
不过就像我前面说的 :当我传送数据的时候,a[1]到达了 a[2]的前一部分到达了 a[3]到达了, a[2]的后一部分 到达了。 这种情况下还是会乱。还有个疑问就是,发多少我接多少。程序为什么会出错呢? 顶多是接收完的文件乱了,程序为什么运行部下去?
{
int a;
BYTE buf[1000];
} A a[3]; 我按a[1] a[2] a[3] 发送数据,数据可能会a[1] a[3] a[2]到达 这我能理解。但是可不可能
a[1] a[2]的一部分 a[3] a[2]的剩下一部分 这种情况呢?如果是这样那就很不好办了啊,数据包乱了不要紧,比方说上面的,我可以用a来判断顺序,但如果
传输的时候一个包被分解了,那就不能根据a来判断了啊!
这很重要啊 也就是说我发一个包出去,会不会接收的时候一个包变好几个了
就是说 我发a[1] a[2] a[3] 那么只有可能顺序乱了 不可能出现包被分解是吧(a[1] a[2] a[3]肯定是一个整体) 是这意思吗?
socket在传输的时候有的结构体可能接受的不完整,
要自己检查介绍到的字节数和结构体的size比较.
你可以用CSocket类来实现,可能不用关心这些细节.
TCP 我发a[1] a[2] a[3] 接收端的情况可能是怎样?(不会乱序?,不会分包?)UDP呢? 知道的说下好不?(这问题解决就结贴给分了)
但是,如果你的a[1]大小是1024,接受到的大小就有可能小于1024然后你需要再接受剩下的字节数.
我发a[1]a[2]a[3]
也就是说TCP发过来的肯定是 a[1]a[2]a[3]这样的顺序对吧
不会是a[1]a[3]a[2] 或者a[1] a[2]一部分 a[3] a[2]另一部分 这种情况吧。UDP呢? 情况会很复杂?
发文件你可以选UPD和TCP都可以,UPD要麻烦得多,因为UPD可以丢包的,所以你得做校验,而且你第一次发的,他不一定是第一次收到的,也不一定能收全,但他的速度是最快的.TCP就简单多了,只要建一条连接,然后在服务端顺序读文件,并发给客户端,然后客户端顺序写文件就行了,不用做校验,也不用但心先发的后到,数据没收完等问题,但速度慢一点.如果你在局域网,或者在网络比较好的时候,你感觉不到的.