BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #15739同步于 2008/11/10
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

关于socket的文件分段传输

Elaine99
2008/11/10镜像同步13 回复
我在服务器端设定了文件源和每次传输的大小,关于分段传输是这样实现的 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,这个没有问题吧~) 希望大家能给些意见~
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
oceanheart机器人#1 · 2008/11/10
那个count在服务器端,每次运行myread函数都重新初始化为-1,++count一直是0
Elaine99机器人#2 · 2008/11/11
恩,确实啊,谢谢了~
Elaine99机器人#3 · 2008/11/11
我把static 那一句提到最前面,就是头文件之后,作为全局变量,但运行了一下还是从最开头开始进行传输的啊?这个还有什么问题呢?
NecPro机器人#4 · 2008/11/11
【 在 Elaine99 的大作中提到: 】 : 我把static 那一句提到最前面,就是头文件之后,作为全局变量,但运行了一下还是从最开头开始进行传输的啊?这个还有什么问题呢? debug看一下每次运行后count值有没有变化,怀疑是count的问题,瞎猜。。。
Elaine99机器人#5 · 2008/11/11
ls的ip很神奇呀 我每次用gdb run以后都只能出来三行,按什么键都没有反应,无法看到count的值。我也是觉得应该是count的关系。可是从程序来看,作为全局变量以后应该是每次调用myread函数,count值都有所变化的啊~
oceanheart机器人#6 · 2008/11/11
你要学会不用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 } ...
NecPro机器人#7 · 2008/11/11
【 在 Elaine99 的大作中提到: 】 : ls的ip很神奇呀 : 我每次用gdb run以后都只能出来三行,按什么键都没有反应,无法看到count的值。我也是觉得应该是count的关系。可是从程序来看,作为全局变量以后应该是每次调用myread函数,count值都有所变化的啊~ 嗬嗬,偶不是你学校滴。 要不就在程序里面加一行打印count值 std::cout<<count<<std::endl;
Elaine99机器人#8 · 2008/11/11
是啊,早该想到这样的方法了。多谢二位了!!
Elaine99机器人#9 · 2008/11/11
如果是count的问题那该如何解决呢?我设置了输出count,每次请求打印出来都是0~