我有两个程序。一个是客户端,另一个是服务器。用于通信的协议必须像 HTTP,但带有文件传输,GET File。问题出在客户端函数中,该函数读取服务器发送的标头(服务器完美发送)。标题将是这样的:
404 *error code etc*
MODE GET *get head unknown*
AM 2969 *always the same*
FILE *NAME*
SIZE *sizeofthefile*
END_HEADER
然后该函数必须recv
逐行读取 ed 缓冲区,并使用sscanf
将标头的值读取到作为指针传递的结构中。问题是,无论我如何尝试编辑和试验代码以查看问题所在,我都会被段错误所淹没。
void getheader(int sock,head_in*inheader)
{
char n[10];
int c;
int k=0;
char buffer[101];
if(recv(sock,buffer,100,0)<=0) serror("Error recving\n",sock);
c=strlen(buffer);
for(int i=0;i<6;i++)
{
int w=0;
for(int j=0;j<c;j++)
{
if((buffer[j+k]=='\n')&&(buffer[j+k]!='\0')) break;
w++;
}
char *line=(char*)malloc(w+1);
for(int j=0;j<w;j++)
{
line[j]=buffer[j+k];
}
k=k+w+1;
if(i==0) sscanf(line,"%d ",&inheader->code);
if(i==1) sscanf(line,"%s %s",n,inheader->mode);
if(i==2) sscanf(line,"%s %d",n,&inheader->am);
if(i==3) sscanf(line,"%s %s",n,inheader->name);
if(i==4) sscanf(line,"%s %d",n,&inheader->size);
free(line);
}
}