estoy haciendo un programa para transferencia de archivos pero tengo unos problemas, a ver si alguien me puede ayudar
tengo el clasico cliente - servidor, el cliente me funciona perfectamente en linux pero a la hora de compilarlo en windows deja de funcionar y no tengo idea que podria ser
antes sabia como hacer transferencia en VB pero cuando inicie en C se me complicaron unas cosas, una de ellas fue como enviar la longitud del archivo a enviar
descubri hace poco que para eso se podia utilizar "htonl", cuando lo mando hago esto
Código
longList = htonl(tam);
pero, al recibirlo lo pongo de esta manera en linux
Código
recv(socket, (char *)buff, sizeof(long), 0); longbites = ntohl(*((long*) buff));
y me funciona bien, pero a la hora de usarlo en windows me da un mensaje de error "xxxxxxxxxh el programa no puede "read", al principio crei que era por "fread" pero cuando quite esta parte del codigo, no me volvio a salir ese mensaje, pero como quite esa parte del codigo no obtuvo nada de datos
tenia entendido que tengo que desreferenciar buff, para que no convierta "ntohl" la direccion y el valor, y de esa manera solo se convierte el puro valor y como mencione, en linux, el cliente recibe la longitud bien, pero en windows me aparece un error, alguien sabe porque u otra manera de
hacerlo?
quedaria algo parecido la parte que en windows no funciona
Código
while((connect(s, (struct sockaddr*)&cliente, tam)) < 0){ } recv(s, (char *)buff, sizeof(long), 0); longbites = ntohl(*((long*) buff)); if(longbites >= 0){ while (i < longbites){ resiv = recv(s, buff, sizeof(buff), 0);
Y tengo otra duda, tengo el cliente en linux por el momento y el servidor en windows, pero alguien sabe como puedo reiniciar o borrar datos de los sockets, porque me conecto y se me manda el archivo bien, pero a la hora de volver a descargarlo ya no se descarga nada.
en el servidor le puse un printf y alli cuando me vuelvo a conectar me aparece correcto la longitud del archivo, pero en el cliente le puse otro printf, para revisar como va la transferencia y me va mostrando "4 bytes enviados... etc" y la primera vez que lo hago me aparecen los datos bien, pero si lo vuelvo a ejecutar solo me aparece el archivo pero sin nada e incluso el cliente me dice "0 bytes enviados"
y en el servidor como les mencione, me aprecen las veces que lo intento la longitud del archivo pero no me manda nada, tengo que cerrar el servidor y volverlo a abrir, asi que la reconexion no creo que sea el problema, y la lectura del archivo me imagino que tampoco, pero no se manda ya nada despues desde el segundo intento
espero alguien me pueda ayudar con esto, salu2