Transfert de fichier sous MFC

cs_seito Messages postés 56 Date d'inscription lundi 15 mars 2004 Statut Membre Dernière intervention 24 mai 2006 - 13 avril 2004 à 16:29
cs_seito Messages postés 56 Date d'inscription lundi 15 mars 2004 Statut Membre Dernière intervention 24 mai 2006 - 14 avril 2004 à 13:19
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

greg883 Messages postés 18 Date d'inscription dimanche 22 décembre 2002 Statut Membre Dernière intervention 10 septembre 2005
13 avril 2004 à 18:46
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 !
0
greg883 Messages postés 18 Date d'inscription dimanche 22 décembre 2002 Statut Membre Dernière intervention 10 septembre 2005
13 avril 2004 à 18:50
et pour le client il faut que tu précises la vraie ip internet du serveur !
0
cs_seito Messages postés 56 Date d'inscription lundi 15 mars 2004 Statut Membre Dernière intervention 24 mai 2006
14 avril 2004 à 13:19
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)
0
Rejoignez-nous