Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: darckbaston en 1 Julio 2011, 01:42 am



Título: Transfiere la mitad del archivo. [winsock]
Publicado por: darckbaston en 1 Julio 2011, 01:42 am
Hola, los otros dias se me dio al curiosidad de aprender sockets y aca esto. Mi problema es que cuando envio un archivo (en este caso una imagen png) me envia la mitad y entonces no se puede abrir la imagen en el formato que le corresponde.

Este es el codigo del cliente donde envio el archivo (no paso la conexión y eso por que sino se hace un poco largo):

Código:
void FileSend( SOCKET sock, const char *dir )
{
int fSize = 0;
char szSize[30];
char szSend[3500];

FILE *file = fopen( "C:\\Lari\\Programacion\\Sockets\\fondo.png", "rb" );

fSize = GetFileSize( file );
printf(" Tamaño del archivo a enviar: %d\n\n", fSize );
sprintf( szSize, "%d", fSize );
send( sock, szSize, strlen(szSize), 0);

while( !feof( file ) )
{
fgets( szSend, 3500, file );
send( sock, szSend, 3500, 0 );

printf( "\tCopiando archivo....\n" );
};

fclose( file );
printf( "\n\nArchivo enviado correctamente....\n" );
}

Este es el del servidor que recive la informacion:
Código:
void FileRecive( SOCKET sock, int len )
{
char szSize[30];
char *szBuffer;
int iSize = 0;
int iRecv = 1;

FILE *file = fopen( "C:\\Lari\\Programacion\\Sockets\\fondo2.png", "wb+" );

printf( "Escribiendo archivo....\n" );

while( iSize == 0 )
{
iRecv = recv( sock, szSize, 30, 0 );

if( strlen(szSize) > 3 )
iSize = atoi( szSize );
}

printf( "Tamaño: %d", iSize );
szBuffer = new char[iSize];

do
{
if( iRecv == SOCKET_ERROR )
break;

iRecv = recv( sock, szBuffer, iSize, 0 );

fputs( szBuffer, file );

} while( iRecv != 0 );

printf( "\n\nArchivo recivido correctamente!!.\n" );

//printf( "\n\n\n ...................... \n\"%s\"\n", szRecv );
fclose( file );
}

Bueno si alguien puede saber porque se lo agradeceria mucho!

Si cometi algun error en la publicacion de este thread avisenmen porque es mi primer thread en este foro, gracias!.