I got many attempts to answer.
The best answer for this question is:
Sync client with server for send stream.
because the recv() function i slower than send() function, clients send amount of data that the server is able to receive.
Clients Code:
char* bufferCMP;
bufferCMP = (char*)malloc(sizeof(char) * size);
p_file = fopen(tmppicsend,"rb");
fread(bufferCMP, 1, size , p_file);
fclose(p_file);
int chunkcount = size / DEFAULT_BUFLEN;
int lastchunksize = size - (chunkcount * DEFAULT_BUFLEN);
int fileoffset=0;
//Sending Actual Chunks
while (chunkcount > 0)
{
iResult = send( m_socket_pic, bufferCMP + (fileoffset * DEFAULT_BUFLEN) , DEFAULT_BUFLEN , 0 );
fileoffset++;
chunkcount--;
if (iResult != DEFAULT_BUFLEN)
{
//printf("Sending Buffer size <> Default buffer length ::: %d\n",WSAGetLastError());
}
else
{
//printf("Sending Buffer size = %d \n", iResult);
}
}
//Sending last Chunk
iResult = send( m_socket_pic, bufferCMP + (fileoffset * DEFAULT_BUFLEN) , lastchunksize , 0 );
Server Code:
int FileCounter=0;
bool flg=true;
char * fileComplete;
char * filesizeBuffer;
FILE *temp;
int iResult;
int receiveBuffer = 0;
int desiredRecBuffer = size ;
//int desiredRecBuffer = DEFAULT_BUFLEN ;
fileComplete = (char*) malloc (sizeof(char)* size );
while (desiredRecBuffer > 0)
{
iResult = recv( current_client, fileComplete + receiveBuffer , desiredRecBuffer , 0 );
//iResult = recv( ClientSocket, fileComplete + receiveBuffer , fileSize , 0 );
if (iResult < 1)
{
//printf("Reveive Buffer Error %d \n", WSAGetLastError());
}
else
{
receiveBuffer += iResult;
desiredRecBuffer = size - receiveBuffer ;
//printf("Reveived Data size : %d \n", iResult);
}
}
FILE *File = fopen(fname, "wb");
fwrite(fileComplete,1, size , File);
//flg = true;
free(fileComplete);
fclose(File);