文件传输问题
本帖最后由 stacksg 于 2012-11-23 21:07:15 编辑
byte *pBuf = new byte[1024]; //申请这样的内存好还是直接byte* pBuf;这样的好?
FILE* fp; int i_len;
if(fp = fopen("video.h264", "rb"))
{
while((i_len = fread(pBuf, 1024, 1, fp)) > 0)
{
send(sock, (char*)pBuf, i_len, 0);//这样发送的话,客户端接收好像跟不上发送速度
memset(byte, 0, 1024);
}
} delete pBuf; //重复使用申请的内存有没有什么隐患?
/*
1. 在select中,这么发送数据好像不好吧?我觉得应该开一个线程来发送文件内容,不然会把处理发送集给堵塞住
了,有什么更好的做法吗?求代码,我也看了飞鸽传书的源码,只是看的有些迷糊.
2. 服务端如此着急的发送数据,好像客户端会跟不上接收速度.求一段客户端接收连续数据和发送连续数据的代码.
3. 还有就是内存问题,这样申请一段内存,而且重复使用有问题吗?
*/
[解决办法]
建议文件一次读到缓冲区,然后分多次发送。
你是TCP连接吗,TCP连接可以保证客户端收到数据。
[解决办法]
1.可以新启一个线程用于发送,如果主线程不做别的什么事情就不用了。
2.发送端如果发现发送缓冲区满了,会自动阻塞的。
3.如果频繁的申请释放内存会导致内存碎片,建议此时用一个数组。
[解决办法]
我觉得楼主关键问题在于接收
直接把数据丢进缓存区还是玩互相拷贝?
1.可以加个sleep降低发送速率,给接收时间
2.接收端单独线程负责拷贝内容,不做其他处理
[解决办法]
这蛋疼代码没有错误?????