Transfert de fichier sous MFC

Signaler
Messages postés
56
Date d'inscription
lundi 15 mars 2004
Statut
Membre
Dernière intervention
24 mai 2006
-
Messages postés
56
Date d'inscription
lundi 15 mars 2004
Statut
Membre
Dernière intervention
24 mai 2006
-
seito


bonjours,
j'aimerais déveloper une application de transfert de fichier sous MFC avec Visual C++ 6.
le code que j'ai conçus marche parfaitement quand je l'execute sur la même machine. mais il bloque quand j'essai de l'executer sur deux machines distinct et ce que quelqu'un peut me dir ce qui cloche.
je met à votre disposition mon code:

pour l'envoi:


HWND hDlg= GetSafeHwnd();
char fileName[MAXLEN_FILEINFO];
char strFilterString[32];
char *res=new char[100];
memset(fileName,0,sizeof(fileName));
memset(StrStatus,0,sizeof(StrStatus));
memset(strFilterString,0,sizeof(strFilterString));
sprintf(strFilterString," ALL FILES");
sprintf(&strFilterString[strlen(strFilterString)+1],"*.*");
BOOL th=BrowseLicenceFile(hDlg,fileName, ".\",strFilterString) ;
chemin(fileName);//c'est une fonction qui me permet d'ajouter un autre \ dans le chemin du fichier à ouvrir
nom_fichier(fileName,res);//cet fonction me permet d'isoler le nom de fichier
f=fopen(fileName,"rb");
fseek(f,0,SEEK_END);
int taille=ftell(f);
fseek(f,0,SEEK_SET);
if(th=TRUE)
{

int nreception=0;
int nlecture=0;
char* buff=new char[1025];
itoa(taille,buff,10);
WSADATA WSAData;
WSAStartup(MAKEWORD(2,0), &WSAData);
SOCKET sock;
SOCKADDR_IN sin;
char *buffer = new char[1025];
sock = socket(AF_INET, SOCK_STREAM, 0);
sin.sin_addr.s_addr	= inet_addr("192.168.0.105");
sin.sin_family	= AF_INET;
sin.sin_port	= htons(8080);
connect(sock, (SOCKADDR *)&sin, sizeof(sin));
send(sock,buff,100,0);
send(sock,res,100,0);
while(!feof(f))
{
nlecture=fread(buff,1024,1,f);
send(sock,buff,1024,0);
}
MessageBox("reussi","r",0);
nreception=recv(sock,buffer,50,0);
buffer[nreception]='\0';
MessageBox("reception reussite","r",0);
}
else
{
MessageBox("desole"," ",16);
}



pour la reception coté serveur j'ai fait comme suit:


int j=1;

FILE* fh;
int taille=0;
int taille_fichier=0;
int n=0;
SOCKET sock,client;
SOCKADDR_IN sin,csin;
char *buff=new char[1024];
sin.sin_addr.s_addr	= inet_addr("192.168.0.105");
sin.sin_family		= AF_INET;
sin.sin_port		= htons(8080);
sock = socket(AF_INET,SOCK_STREAM,0);
bind(sock, (SOCKADDR *)&sin, sizeof(sin));
listen(sock,0);
int sinsize = sizeof(csin);
if((client=accept(sock,(SOCKADDR *) &csin, &sinsize))!=INVALID_SOCKET)
{
taille=recv(client,buff,1024,0);
taille_fichier=atoi(buff);
recv(client,buff,1024,0);
fh=fopen(buff,"wb");
fseek(fh,0,SEEK_SET);
do
{
n=recv(client,buff,1024,0);
fwrite(buff,n,1,fh);
taille_fichier-=n;
}
while(taille_fichier>0);

send(client,"hello world\n\r",14,0);
MessageBox("envoi reussi","reussi",0);

}
else 
{
j=0;
MessageBox("connection impossible","echec",0);
}
fclose(fh);
}


dans l'attente d'une réponse merci.

3 réponses

Messages postés
18
Date d'inscription
dimanche 22 décembre 2002
Statut
Membre
Dernière intervention
10 septembre 2005

Côté serveur:

sin.sin_family = AF_INET;
sin.sin_port = htons(8080);

ok !

mais sin.sin_addr.s_addr = inet_addr("192.168.0.105");

si tu passes par internet ça ne va pas car c'est une ip locale, de plus dans ce cas tu n'acceptes que l'ip "192.168.0.105"
et il faut écrire :
sin.sin_addr.s_addr=INADDR_ANY;

enfin je ne suis pas sur de ce que je dit !
Messages postés
18
Date d'inscription
dimanche 22 décembre 2002
Statut
Membre
Dernière intervention
10 septembre 2005

et pour le client il faut que tu précises la vraie ip internet du serveur !
Messages postés
56
Date d'inscription
lundi 15 mars 2004
Statut
Membre
Dernière intervention
24 mai 2006

seito
désolé mais j'i essayé et ça marche pas ce qui me chagrine c'est que ça marche quand je les utilise sur la même machine mais une fois que je les essai sur deux machine distinct les fichiers textes ça passe mais les autres types bloque le programme et même les fichiers textes sont altéré.
merci pour la réponse. :question)