C++中TCP通信实现文件传输
作为Computer networks课程的一个project,我们需要实现用TCP在mininet中client和server的相互通信,需要能够传输文本文件,binary file 和image file。整个project的目的还是比较明确的。我主要列出了一下几个问题,需要在代码中实现。
1. 实现main函数的接口
因为client和server 需要的参数需要通过命令行输入,所以需要用getoptlong函数来实现。
2. 实现socket programming中的功能
在这个项目中提供了socket programming的接口,按照需要设置即可。
3. 连续send造成的粘包问题
由于TCP拥有优化算法,可以将多个send的数据被一个recv收到,所以造成粘包问题。本项目中会要求先发送文件长度,再发送文件,连续发送造成文件长度和文件粘合在一起,造成无法读出文件。解决办法是加入sleep()函数在两次send之间。这样就能将两次send分开了。
4. 大文件的接收问题
大文件的接受容易由于buffer长度的限制,造成丢失。因此需要设置一个MAX_MESSAGE_SIZE。分成多次完成接收。本来想要在send端也多次发送,效果不好。
5. 文件的读写
由于文件的类型不确定,打开文件都需要用binary格式,读写的时候一定要注意,用read()和write()函数,千万不要<<或者>>,因为后一种方式没法确定文件类型。
大概就是这些,因为课程没有结束,暂时就不放代码了,以后补齐。
C++中TCP通信实现文件传输
原文地址:https://www.cnblogs.com/huzdong/p/13340522.html