All pastes #426118 Raw Edit

Unnamed

public text v1 · immutable
·published 2007-04-05 22:25 UTC
rendered paste body
void StartRecvFile(SOCKET s)
{// retrives message from server that gives filename, and filelen;
int left;
int ret;
int bytesrecieved;

char temprb[1024];	// temp recieve buffer.
int readidx,writeidx;
int msglen;

// found out how long the message is.
bytesrecieved=0;
writeidx=0;
while(bytesrecieved < 4)
	{	
	// wait untill we know how big the message is going to be.
	ret = recv(s,&temprb[writeidx],4-bytesrecieved,0);
	
	if(ret == 0)
		{
		MessageBox(NULL,"Socket Closed","Client Error",MB_OK);
		PostQuitMessage(0);
		return;
		}
	if(ret == SOCKET_ERROR)
		{
		MessageBox(NULL,"Socket Error","Client Error",MB_OK);
		PostQuitMessage(0);
		return;
		}
	else
		{
		bytesrecieved += ret;
		writeidx += ret;
		}
	}
readidx=0;
BufferRead(&msglen,4,1,temprb,&readidx);

// Now recieve the rest of the message.
left = msglen-4;
while(left)
	{
	ret = recv(s,&temprb[writeidx],left,0);
	if(ret == 0)// Socket closed.
		{
		MessageBox(NULL,"Socket Closed","Client Error",MB_OK);
		PostQuitMessage(0);
		return;
		}
	else if(ret == SOCKET_ERROR)
		{
		MessageBox(NULL,"Socket Error","Client Error",MB_OK);
		PostQuitMessage(0);
		return;
		}
	else // success.
		{
		left -= ret;
		writeidx += ret;
		}
	}// end while(bytes left to read)

// Now read the filename and filelen;
readidx = 6;	// skip past header and get to data.
BufferReadString(filename,temprb,&readidx);
BufferRead(&filelen,4,1,temprb,&readidx);

sprintf(temprb,"filename:%s\nfilelength:%d",filename,filelen);
MessageBox(NULL,temprb,"Client Notice",MB_OK);

// Create the file for writing
fp = fopen(filename,"wb");
if(fp == NULL)
	{
	MessageBox(NULL,"Unable to create file","Error",MB_OK);
	PostQuitMessage(0);
	}		
}// end StartFileRecv(sock).

unsigned _stdcall RecvFileProc(void *param)
{
long count;			// number of bytes left for entire file.
int ret;

StartRecvFile(s);

count = filelen;
while(count)
	{
	ret = recv(s,rb,BUFFER_SIZE,0);
	if(ret == 0)
		{
		MessageBox(NULL,"Error Socket Closed.","Client Error",MB_OK);
		return -1;
		}
	else if(ret == SOCKET_ERROR)
		{
		MessageBox(NULL,"Socket Error.","Client Error",MB_OK);
		return -1;
		}
	else	// success.
		{
		count -= ret;
		total_recieved += ret;
		fwrite(rb,1,ret,fp);

		InvalidateRect(PROGRAMWND,NULL,1);
		}
	}// end while(file not done).

MessageBox(NULL,"File Complete.\nPlease Close this program window.","Success",MB_OK);
fclose(fp);
return 0;
}// end RecvProc(...)