返回信息流我在服务器端设定了文件源和每次传输的大小,关于分段传输是这样实现的
void myread(char *buff)
{ static int count=-1;
FILE *fp=fopen("serve.cpp", "r");
if(!fp)
{
perror("fopen");
exit(2);
}
if(!feof(fp))
{fseek(fp,(++count)*MAXTRANS,SEEK_SET);
fread(buff,1,1024,fp);
}
fclose(fp); }
利用偏移量使得每次传输都是上一次的1k偏移,只要客户端有请求我就传。第一次请求当然从文件头开始,第二次请求就从开头偏移1k开始。可是我传输的结果却每次都从头开始,这是为什么啊?
我调用myread的语句如下
myread(buff);
if (send(new_fd, buff,strlen(buff)+1,0)==-1)
{
perror("send");
close(new_fd);
exit(0);}
并且每次用gdb调试这个服务器端的程序的时候,一输入run就出来三行就没反应(在cygwin中用gdb,这个没有问题吧~)
希望大家能给些意见~
这是一条镜像帖。来源:北邮人论坛 / cpp / #15739同步于 2008/11/10
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
关于socket的文件分段传输
Elaine99
2008/11/10镜像同步13 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
【 在 Elaine99 的大作中提到: 】
: 我把static 那一句提到最前面,就是头文件之后,作为全局变量,但运行了一下还是从最开头开始进行传输的啊?这个还有什么问题呢?
debug看一下每次运行后count值有没有变化,怀疑是count的问题,瞎猜。。。
ls的ip很神奇呀
我每次用gdb run以后都只能出来三行,按什么键都没有反应,无法看到count的值。我也是觉得应该是count的关系。可是从程序来看,作为全局变量以后应该是每次调用myread函数,count值都有所变化的啊~
你要学会不用gdb调试,在程序中加入打印语句来查看你关心的变量变化。
比如:
...
if(!feof(fp))
{
fseek(fp,(++count)*MAXTRANS,SEEK_SET);
//#ifdef DEBUG
printf("count:%d\n"); //for debug
//#endif
fread(buff,1,1024,fp);
//#ifdef DEBUG
printf("buf:%s",buf); //for debug
//#endif
}
...
【 在 Elaine99 的大作中提到: 】
: ls的ip很神奇呀
: 我每次用gdb run以后都只能出来三行,按什么键都没有反应,无法看到count的值。我也是觉得应该是count的关系。可是从程序来看,作为全局变量以后应该是每次调用myread函数,count值都有所变化的啊~
嗬嗬,偶不是你学校滴。
要不就在程序里面加一行打印count值
std::cout<<count<<std::endl;