[Ayuda] Problema con funcion send y pisar datos

Iniciado por Vaagish, 22 Mayo 2013, 20:36 PM

0 Miembros y 1 Visitante están viendo este tema.

Vaagish

Buenas amigos, como andan ?

Últimamente estoy haciendo muchas preguntas, pero bueno, veamos el lado positivo, hay rotatividad en el foro   :silbar:

Bueno, tengo el siguiente problema :



Buscar proc FtoF:DWORD

invoke FindFirstFile, FtoF, addr SFile
cmp eax, -1
je NoEncontrado
mov Hand, eax


Buccle:
invoke wsprintf, addr Bufi, addr Envio, addr SFile.cFileName
invoke send, sock, addr Bufi, sizeof Bufi, 0
cmp eax, SOCKET_ERROR
je ErSo
invoke FindNextFile, Hand, addr SFile
cmp eax, 0
je Salida
jmp Buccle

ErSo:
invoke WSAGetLastError
invoke dwtoa, eax, addr ErrNa
invoke MessageBox, 0, addr ErrNa, addr Titulo, MB_OK

Salida:
invoke FindClose, addr Hand
jmp Fin

NoEncontrado:
invoke send, sock, addr NoE, sizeof NoE, 0

Fin:
ret
Buscar endp



El problema al parecer es que el "Buccle" se ejecuta mas rápido de lo que el cliente puede procesar, o algo asi.. porque si pongo un mensaje entre ciclo y ciclo del bucle los datos llegan, pero si dejo la rutina asi, sin pausa alguna, al parecer algo se pisa el palito,, pero tampoco sale error de send..  :-\

x64core

Pone el codigo entero, al menos todo lo relacionado al problema.
ami me da pereza cuando leo codigos imcompletos por ejemplo tipos de variables, etc

Vaagish

Hola.. Perdon que respondo tan tarde, recien veo que no esta mi comentario anterior.. el problema ya esta resuelto.. Pongo la solucion:



SFile WIN32_FIND_DATA <> (Estructura para busqueda de archivos)
NoE db "MSG|Archivo no encontrado0", 0
EFile db "File|%s0", 0
EFold db "Fold|%s0", 0

ThreadBus proc FtoF:DWORD

invoke FindFirstFile, FtoF, addr SFile
cmp eax, -1
je NoEncontrado
mov Hand, eax

Buccle:

invoke FindNextFile, Hand, addr SFile
cmp eax, 0
je Salida

cmp SFile.cFileName, PUNTO
je Buccle

cmp SFile.dwFileAttributes, FILE_ATTRIBUTE_DIRECTORY
jne Files
;Envio las carptas
invoke wsprintf, addr Bufi, addr EFold, addr SFile.cFileName
invoke send, Sock, addr Bufi, sizeof Bufi, 0
jmp Buccle

Files:
;Envio los archivos
invoke wsprintf, addr Bufi, addr EFile, addr SFile.cFileName
invoke send, Sock, addr Bufi, sizeof Bufi, 0
jmp Buccle

Salida:
invoke FindClose, addr Hand
jmp Fin

NoEncontrado:
invoke send, Sock, addr NoE, sizeof NoE, 0

Fin:

ret
ThreadBus endp



Justo ahora lo estoy por arreglar, porque funciona bastante bien, pero no es optimo del todo :p
Esta funcion (ThreadBus) tiene que ser llamada como un thread para que funcione bien..

Saludos!