0

我有两个程序。一个是客户端,另一个是服务器。用于通信的协议必须像 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);
    }                                               
}
4

0 回答 0