0

我使用 SSL 库在 C 中创建了一个客户端/服务器应用程序。我面临的问题是每次我发送文件时,文件开头都会丢失一些字节。

假设我发送的文本文件包含

123456789

当客户端收到它包含的文件时

56789

服务器代码

void sendFile(SSL* ssl)
{
    char response[2048] = {0};
    int read = 0;
    FILE* fd;

    fd = fopen("snt.txt","rb");

    if (fd == NULL)
    {
        printf("file loading failed\n");
        return;
    }
    while ((read=fread(response,sizeof(char),1024,fd)) > 0)
    {
        SSL_write(ssl,response,read);
        printf("read :%d\n",read);
        //puts(response);
        //printf("***Data Sent***\n");
        memset(response,0,1024);
    }
    printf("***Data Sent***\n");
    fclose(fd);
}

客户代码

FILE *ft;
char filebuf[2048];
int read = 0;
int error_check=0;
ft = fopen("rcv.txt","ab");
if (ft == NULL)
{
    printf("Can not open file to write\n");
    return -1;
}
memset(filebuf,0,2048);
int cnk=1;
while ((error_check=BIO_read(bio,&read,sizeof(int)))>0)
{
    //printf("%d read\n",read);
    if (error_check==0)
        break;

    if (read==0)
        break;

    BIO_read(bio,filebuf,read);
    printf("%d Chunk Recieved\n",cnk++);
    //puts(filebuf);
    fwrite(filebuf,sizeof(char),strlen(filebuf),ft);
    memset(filebuf,0,2048);

}
printf("***File Recieved***");
fclose(ft);

另一个问题是客户端没有终止,控制没有脱离while循环,请指导我如何解决这些问题

4

1 回答 1

3

假设size(int)4,我会说第一个4个字节是由这一行读取的:

while ((error_check=BIO_read(bio,&read,sizeof(int)))>0)

剩下的数据发送到这一行:

BIO_read(bio,filebuf,read);

后者读取它filebuf,然后写入文件rcv.txt

于 2013-10-31T08:13:46.280 回答