C中客户端-服务器应用程序中缺少字节
我使用SSL库在C中创建了一个客户机/服务器应用程序。我面临的问题是,每次发送文件时,文件开头都会丢失一些字节 假设我发送的文本文件包含C中客户端-服务器应用程序中缺少字节,c,client-server,C,Client Server,我使用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)
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);
客户端代码
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循环,请指导我如何解决这些问题假设大小(int)
为4
,我想说前4个字节是通过此行读取的:
while ((error_check=BIO_read(bio,&read,sizeof(int)))>0)
BIO_read(bio,filebuf,read);
剩下的数据将发送到此行:
while ((error_check=BIO_read(bio,&read,sizeof(int)))>0)
BIO_read(bio,filebuf,read);
后者将其读入filebuf
,然后将其写入文件rcv.txt
假设size(int)
为4
,我认为前4个字节由此行读取:
while ((error_check=BIO_read(bio,&read,sizeof(int)))>0)
BIO_read(bio,filebuf,read);
剩下的数据将发送到此行:
while ((error_check=BIO_read(bio,&read,sizeof(int)))>0)
BIO_read(bio,filebuf,read);
后者将其读入filebuf
,然后将其写入文件rcv.txt
假设size(int)
为4
,我认为前4个字节由此行读取:
while ((error_check=BIO_read(bio,&read,sizeof(int)))>0)
BIO_read(bio,filebuf,read);
剩下的数据将发送到此行:
while ((error_check=BIO_read(bio,&read,sizeof(int)))>0)
BIO_read(bio,filebuf,read);
后者将其读入filebuf
,然后将其写入文件rcv.txt
假设size(int)
为4
,我认为前4个字节由此行读取:
while ((error_check=BIO_read(bio,&read,sizeof(int)))>0)
BIO_read(bio,filebuf,read);
剩下的数据将发送到此行:
while ((error_check=BIO_read(bio,&read,sizeof(int)))>0)
BIO_read(bio,filebuf,read);
后者将其读入
filebuf
,然后写入文件rcv.txt
,换句话说,服务器代码没有发送客户端代码在数据之前所期望的长度前缀。@WiXXeY:WhozCraig提到服务器和客户端不使用(“说话”)相同的协议。客户端希望服务器首先发送要传输的数据量。服务器没有这样做。换句话说,服务器代码没有发送客户端代码在数据之前所期望的长度前缀。@WiXXeY:WhozCraig提到服务器时,客户端没有使用(“speak”)相同的协议。客户端希望服务器首先发送要传输的数据量。服务器没有这样做。换句话说,服务器代码没有发送客户端代码在数据之前所期望的长度前缀。@WiXXeY:WhozCraig提到服务器时,客户端没有使用(“speak”)相同的协议。客户端希望服务器首先发送要传输的数据量。服务器没有这样做。换句话说,服务器代码没有发送客户端代码在数据之前所期望的长度前缀。@WiXXeY:WhozCraig提到服务器时,客户端没有使用(“speak”)相同的协议。客户端希望服务器首先发送要传输的数据量。服务器无法执行此操作。FILEBUF值为1024,我已编辑questionFILEBUF值为1024,我已编辑questionFILEBUF值为1024,我已编辑questionFILEBUF值为1024,我已编辑questionFILEBUF值为1024,我已编辑问题