salut !
lorsque j' execute les deux programmes sur mon pc, tout marche bien ,meme si je
valide l'ip internet . Mais lorsque je les ai testé avec mes amis ,le fichier n'est pas recu !
en tout cas ,voila les codes :
/*************************************/
// client :
#include <winsock.h>
#include <stdio.h>
#pragma comment(lib, "wsock32.lib")
int main()
{
char buffer[8000] ;
char nomfichier[30] ;
printf("fichier : ") ;
scanf("%s",nomfichier) ; //fichier.txt
FILE* file = fopen(nomfichier, //ouverture en lecture seule en mode txt
"rb") ;
if(file == NULL)
{
printf("erreur lors l'ouverture du fichier\n") ;
exit(-1) ;
}
WSADATA WSAData;
WSAStartup(MAKEWORD(1,0), &WSAData);
SOCKET sock;
printf("Ip : ") ;
scanf("%s",buffer) ;
SOCKADDR_IN sin;
sock = socket(AF_INET, SOCK_STREAM, 0);
// les proprietes du socket du server
sin.sin_addr.s_addr = inet_addr(buffer);
sin.sin_family = AF_INET;
sin.sin_port = htons(4444);
if(connect(sock, (SOCKADDR *)&sin, sizeof(sin)) == INVALID_SOCKET)
{
printf("la connection a echoué\n") ;
getchar() ;
return 1 ;
}
printf("connection etablie\n") ;
send(sock,nomfichier,30,0) ;
recv(sock,nomfichier,30,0) ;
int SizeReaded = 1 ;
long SizeSended = 1 ;
printf("transfert des données en cours...\n") ;
while(SizeReaded>0 && SizeSended>0)
{
SizeReaded = fread(buffer,1,8000,file) ;
SizeSended = send(sock,buffer,SizeReaded,0) ;
}
fclose(file) ; // fermeture du fichier
closesocket(sock) ;
WSACleanup() ;
printf("fichier bien envoye\n") ;
printf("appuyer sur une touche pour sortir ...") ;
getchar() ;
getchar() ;
return 1;
}
/***********************************/
// server
#include <stdio.h> // printf
#include <winsock.h>
#pragma comment(lib, "wsock32.lib")
int main()
{
char buffer[8000] ;
char nomfichier[30] ;
memset(nomfichier,0,30) ;
printf("veuillez attendre que le client se connecte ...\n") ;
WSADATA WSAData;
WSAStartup(MAKEWORD(1,0), &WSAData);
SOCKET sock;
SOCKET csock = INVALID_SOCKET;
SOCKADDR_IN sin;
sock = socket(AF_INET, SOCK_STREAM, 0);
sin.sin_addr.s_addr = INADDR_ANY;
sin.sin_family = AF_INET;
sin.sin_port = htons(4444);
bind(sock, (SOCKADDR *)&sin, sizeof(sin));
listen(sock, 1);
int a = sizeof(sin) ;
while(csock == INVALID_SOCKET)
{
csock = accept(sock,(SOCKADDR*)&sin,&a) ;
}
printf("connection etablie\n") ;
recv(csock,nomfichier,30,0) ;
send(csock,nomfichier,30,0) ;
FILE*file = fopen(nomfichier,"wb") ;
if(file == NULL)
{
printf("erreur lors l'ouverture du fichier\n") ;
exit(-1) ;
}
long SizeRecv = 1 ;
int SizeWrited = 1 ;
printf("reception des donnees ...\n") ;
while(SizeRecv>0 && SizeWrited>0)
{
SizeRecv = recv(csock,buffer,8000,0) ; //reception des donnees
SizeWrited = fwrite(buffer,1,SizeRecv,file); //ecriture du buffer
}
fclose(file) ;// fermeture du fichier
printf("fermeture du fichier \n") ;
closesocket(sock) ;
WSACleanup() ;
printf("transfert terminé fichier bien recu \n") ;
printf("appuyer sur une touche pour sortir ...") ;
getchar() ;
return 1;
}
/****************************/
merçi d'avance