当前位置:C++技术网 > 资讯 > 工作日记:Socket网络传输超大文件实现问题和学习控件编程的方法

工作日记:Socket网络传输超大文件实现问题和学习控件编程的方法

更新时间:2015-06-25 14:51:09浏览次数:1+次

    2013年8月19日 星期一  晴

    很久没有写工作日记了。上个星期在学习网络通信传文件的技术。直接传送文件做到了,复制二进制文件也可以了。但是对文件的准确大小复制,也可以做到。但是这是写定了的。就是说程序里知道才定义了合适的大小。但是真正在传送文件时,谁也不知道要传的文件是多大,因此这样是不够的。同时,大文件复制没做到,更别说网络传送了,因为上文件上G的一次性全部内存大小有限,网络数据包大小也不可能这么大的。因此要处理分片。而我试图用分批次的传送来确定传送文件的信息。先发送过去一个文件信息的结构体,然后在接收方创建文件准备接收文件,这样我传送文件后,文件的内容总是不对,用十六进制查看文件,竟然发现文件只有7个字节有内容,其他的都是空的。找到这个问题花了很久,也问过同事,他们说文件有问题。因为我能够创建文件,大小也对,但就是内容不对,很明显就是文件有问题。但是具体是什么问题,不清楚,没找到原因,不好解决问题。最后我用windiff软件比较原文件和接收时创建的文件,结果显示不一样,这样就证明确实是文件问题。问题是什么呢,因为是二进制文件,自然要用二进制方式进行查看,然后就用UltraEdit软件以十六进制打开查看。只有开头7个字节有数据,然后就分析原因,然后发现应该是第一次传送的文件信息结构体的大小。第一次接收后套接字的内容还是文件信息,因而写文件就将文件信息写入文件,所以出问题了。然后就尝试用阻塞式的文件读取,结果还不行。因为这样程序就卡死了,异步有比较麻烦。反正这一块就一下子弄不清楚了。Socket传送还学得不够。文件传送的模式也不了解。然后就请教同事朱念,他说了他们的通常做法,也就是自己定义一个协议,基于底层的协议,说白了就是自己定义一个传送规则而已。在传送文件时头几个字节带上文件信息,后面带数据。这个我就已经会了。但是大文件传送时就不知道在接收方定义多大的缓存。说了半天他才知道我的意思,说要进行数据分片。说到最后这就像底层的协议的数据传送方法,这就和理论上学的东西联系起来了。以前对这些协议只是知道是这么个意思,但是从来就不会用。现在自己去定义传送协议,这样就理解得更深刻了。这个星期主要的学习内容就是解决文件传送的分片传送问题。

    上个星期还顺便学了基本控件的使用。学习控件的使用也是摸出了一套学习方法。首先拖一个控件出来,关联变量来确定控件类,然后用MSDN来查类方法,然后就看看介绍,练习就会了,然后其他的控件的使用方法也基本按这个套路。这样就可以快速将控件的基本使用学会。API编程不懂的也可以参考MFC的代码,其实编程环境生成的代码就是我们学习的最好的资源,研究好这些代码就能够很好的促进我们的学习。学习编程要多看别人的代码,这样就可以拓宽自己的视野和思维。好了,对上个星期就这样稍加总结吧,控件的使用基本没什么问题,就是文件传送的一点问题。加油,学习的步伐只会越来越快的。