Salut a tous,

Je suis en train de travailler sur un programme qui doit recuperer un fichier audio present sur un serveur Web. Pour cela, j'ai un fichier Php qui recupere une requete POST et envoie le code du fichier donne en parametre.

Voici le code :

Code php : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
	$cmd    = $_POST['cmd'];
 	$user   = $_POST['user']; 
	$passwd = $_POST['passwd']; 
 
	$version_soft = $_POST['version_soft'];	
	$id_audio = $_POST['id_audio'];
 
        // Perment d'envoye le code du fichier
	readfile($id_audio);
 
	exit;
 
?>
De l'autre cote, j'ai realise un programme en C qui envoie une requete de type POST au serveur et qui recupere la reponse qui est l'entete HTTP plus les donnees du fichier audio ki est envoyé.

Je recupere bien l'entete et les données du fichier audio que je sauvegarde dans un fichier. Le pb vient du fait que les fichiers de depart et d'arrive sont different, il y a quelques octets (tres peu) qui ont ete ajoute lors de l'envoi et je ne sais pas du tout pourquoi.

Voici le code C :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
 
char *servername = "127.0.0.1";
char *filepath = "/media.php";
char *param = "cmd=2&user=user&passwd=passwd&version_soft=version_soft&id_audio=file.wav";
 
int len = strlen(param);
sprintf(msg,"POST %s HTTP/1.1\r\nHost:<a href="http://www.lalala.com\r\nContent-type:" target="_blank">www.lalala.com\r\nContent-type:</a>application/x-www-form-urlencoded\r\nContent-length:  %d\r\n\r\n%s\r\n\r\n",filepath,len,param);
 
 
send(conn,msg,strlen(msg),0);
 
// We have to open with the binary mode
fp = fopen("./file.wav","wb");
 
// Pour lire l'entete en premier	
int type = 0;
while((type != 4) && (y = recv(conn,header,1,0))) {
		if (type == 0 && header[0] == '\r')
			type = 1;
		else if (type == 1 && header[0] == '\n')
			type = 2;
		else if (type == 2 && header[0] == '\r')
			type = 3;
		else if (type == 3 && header[0] == '\n')
			type = 4;
		else
			type = 0;
	}
 
// Et apres on recupere les octets du fichier envoye et on les sauve
 
	while(y=recv(conn,buff,sizeof(buff),0))
	{
		fwrite(buff,y,1,fp);
	}
 
	fclose(fp);
	closesocket(conn);
	WSACleanup();
Et donc a la fin de l'execution, je recois bien le 99 % du fichier mais des bytes se sont inseres et je ne sais pas d'ou il provienne.
Si quelqu'un pouvait me renseigner et m'aider ??

Merci d'avance
Bonne nuit