Я хочу отправить несколько файлов с сервера на клиент, но у меня возникла проблема.Что делать после завершения работы (носок, SD_SEND)
сервера SendFile код:
while ((len = fread(Buffer,1,sizeof(Buffer), fs)) > 0)
{
if((resultEnviar = send(ClientSocket,Buffer,len,0)) < 0){
printf("ERROR: Failed to send file %s.\n", nombreArchivoADescargar.c_str());
break;
}
sumEnviada+=resultEnviar;
}
fclose(fs);
Client код receiveFile:
//shutdown(sock, SD_SEND); ???????
do{
recvVal = recv(sock, Buffer2, sizeof(Buffer2), 0);
if (recvVal <= 0){
printf("Can't read from socket");
recvVal =0;
fclose(fp);
continue;
}else{
int off =0;
do{
int write_sz = fwrite(Buffer2, 1, recvVal, fp);
if (write_sz < 0){
printf("Can't write to file");
fclose(fp);
break;};
if (write_sz == 0) {cout<<endl<<"Nada que copiar"<<endl; break;}
off += write_sz;
}while(off<recvVal);
bzero(Buffer2, 1024);
contador+=off;
}
}while (contador<LongitudArchivo);
cout<<endl<<"Numero de bytes recibidos: "<<contador<<endl<<endl;
printf("Ok received from client!\n");
fclose(fp);
Если я не использую ВЫКЛЮЧЕНИЕ (носка, SD_SEND) Я не получаю все ожидаемые байты, но если Я использую его. Я не знаю, как отправить больше файлов (как просыпать часть отправки сокета).
Спасибо!
Можете ли вы указать тип «Буфер2»? будьте осторожны, если Buffer2 является указателем, так как sizeof (Buffer2) вернет размер указателя (4 байта в 32 битной дуге) вместо емкости буфера. – cbuchart