Bonjour, j'aimerais pouvoir, en C, en console, envoyer un fichier vers un autre ordinateur. je dis bien le fichier, non le contenu du fichier !
le mieux serait de gruger pour utiliser les socket.
Idées pour m'aider ?
Version imprimable
Bonjour, j'aimerais pouvoir, en C, en console, envoyer un fichier vers un autre ordinateur. je dis bien le fichier, non le contenu du fichier !
le mieux serait de gruger pour utiliser les socket.
Idées pour m'aider ?
Sous quel système?
Que veux tu dire par :
Citation:
Envoyé par lapras123
sous windows.
je veux dre :
je veux pas envoyer une variable contenant le contenu du fichier
genre :
char contenu[50]="contenu du fichier";
kje veux envoyer la variable FILE *fichier !
Elle ne sera pas utilisable sur une autre machine...Citation:
Envoyé par lapras123
Que veux tu faire exactement?
La variable fichier initialisée :Citation:
Envoyé par lapras123
ne représente pas le fichier mais est une structure pour lire correctement le fichier. Envoyer la valeur fichier vers un autre ordinateur n'a aucun sens vu que c'est un pointeur.Code:
1
2 FILE *fichier = fopen("test", "r");
Et envoyer le contenu n'a aucun sens puisque le fait d'avoir le contenu ne veut pas dire que tu as le fichier sur l'autre ordinateur. De plus, même si le fichier existait cela ne fonctionnerait pas.
Jc
Voici mon idée :
Je stock dans un fichier repertoire.txt l'arborescence d'un répertoire entier avec ses sous repertorie ect..
Ca peut devenir énorme
la lecture de repertoire.txt est trop grande
je veux donc mettre le fichier repertoire.txt qui es sur l'ordi de mon client sur mon ordi pour que je puise le visualiser avcec le bloc note, nottepadd++ ect...
voila mon idée :)
Tu veux l'envoyer via le réseau?
Comment es tu connecté avec ton client?
Avec des socket Par Telnet sur le port 4662.
ca marche bien la conneion j'ai tout vérifié !
Alors la je vois pas ce que tu veux dire. Tu veux envoyer l'objet et pas son contenu ???Citation:
Envoyé par lapras123
Cette question est un non sens à mon gout.
Si tu copie un fichier entre fat32 et ntfs il ne sera pas référencé de la meme façon.
Arrête moi si je me trompe, mais tu souhaites en fait "copier" un fichier de la machine du client sur ta machine.
Je ne suis pas un Pro en C mais cela ne me parait pas vraiment être un problème de C...
Pour récuprérer un fichier d'une machine vers une autre, tu dois utiliser un protocole de transfert de fichiers, comme le FTP, le SFTP (par SSH2), ou encore dans un réseau local le NetBEUI (pour Windows).
Au boulot quand on veut récupérer un fichier comme ca on utilise SFTP. Sous linux il suffit d'avoir un serveur SSH comme OpenSSH et sous windows on utilise Cygwin + OpenSSH.
Il doit sans doute existe d'autre moyen, mais en C, hors mis utiliser un protocole de transfert de fichier, je ne vois pas comment tu pourrais faire.
Effectivement mais ce problème peut être intégré dans le protocol du programme qu'il tente de programmer...Citation:
Envoyé par Pikwik
Ex :
Code:
1
2
3Si le fichier n'est pas présent, Récupérer/Accéder le/au fichier chez le client
Des sockets et un envoi bête en méchant.Citation:
Il doit sans doute existe d'autre moyen, mais en C, hors mis utiliser un protocole de transfert de fichier, je ne vois pas comment tu pourrais faire.
En fait, si je regarde un peu les posts, j'ai l'impression que l'auteur original ne veut pas envoyer le fichier mais juste avoir accès au fichier à distance.
La seule solution qui le permettrait serait de faire un protocol d'accès au fichier. Le serveur veut lire les 100 premiers octets du fichier, il envoie un message :
Par exemple... Et lorsque le client reçoit ce message, il peut envoyer les 100 premiers octets du fichier au serveur...Citation:
FICHREQ 0 100
Deux choses à remarquer :
A part si ton fichier est vraiment énorme et que le serveur ne va pas forcément avoir à lire tout le fichier, cette solution est envisageable. Mais elle demande plus de travail que juste :
Mais ceci n'est pas une question de C pour l'instant puisqu'il faut d'abord décider de l'algorithme du programme, du protocol de transfert et ensuite codé le tout en C...Citation:
Le serveur n'a pas le fichier,
Le serveur demande au client le fichier
Le client envoie le fichier
Jc
tu peut definir un serveur comme tels:
Citation:
#include<stdio.h>
#include<winsock2.h>
#pragma comment(lib,"ws2_32.lib")
int main(int argc, char *argv[])
{
int port;
SOCKET sock;
SOCKADDR_IN csin;
WSADATA wsa;
WSAStartup(MAKEWORD(2,0),&wsa);
if(argc >= 2){
port = atoi(argv[1]);
printf("%d",port);
}
else {
if("%s","\nPort : ");
scanf("%i",&port);
}
csin.sin_family=AF_INET;
csin.sin_addr.s_addr=htonl(INADDR_ANY);
csin.sin_port=htons(port);
sock=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
bind(sock,(SOCKADDR*)&csin,sizeof(csin));
listen(sock, 1);
SOCKET val = INVALID_SOCKET;
int len=sizeof(csin);
while(val==INVALID_SOCKET)
{
val = accept(sock, (SOCKADDR *)&csin, &len);
}
printf("accept ok\n");
char buffer[50];
memset(buffer,0,sizeof(buffer));
int err=0;
err=recv(val,buffer,sizeof(buffer),0);
FILE *fichier = fopen(buffer,"wb");
printf("%s",buffer);
while(err>-1)
{
err=recv(val,buffer,sizeof(buffer),0);
if(buffer[0]!='\0'){
//printf("%s\n",buffer);
fwrite(buffer,sizeof(buffer),1,fichier);
}
else err=-2;
memset(buffer,0,sizeof(buffer));
}
printf("Connection terminée\n\n");
WSACleanup();
system("PAUSE");
return 0;
}
ainsi que client:
Citation:
#include<stdio.h>
#include<winsock2.h>
#pragma comment(lib,"ws2_32.lib")
int main(int argc, char *argv[])
{
char nomfichier[255];
int port;
char ip[15];
SOCKET sock;
SOCKADDR_IN sin;
WSADATA wsa;
WSAStartup(MAKEWORD(2,0),&wsa);
if(argc >= 2){
strcpy(ip,argv[1]);
printf("%s\n",ip);
}
else {
printf("Ip : ");
scanf("%s",ip);
}
if(argc >= 3){
port = atoi(argv[2]);
printf("%d\n",port);
}
else {
printf("port : ");
scanf("%d",&port);
}
if(argc >= 4){
strcpy(nomfichier,argv[3]);
printf("%s\n",nomfichier);
}
else {
printf("nom du fichier : ");
scanf("%s",nomfichier);
}
FILE *fichier = fopen(nomfichier,"rb");
sin.sin_family=AF_INET;
sin.sin_addr.s_addr=inet_addr(ip);
sin.sin_port=htons(port);
sock=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
bind(sock,(SOCKADDR*)&sin,sizeof(sin));
if(connect(sock,(SOCKADDR*)&sin,sizeof(sin)))
{
printf("La connection a echoue\n");
system("PAUSE");
exit(0);
}
char buffer[50];
memset(buffer,0,sizeof(buffer));
int err=0;
err=send(sock,nomfichier,sizeof(buffer),0);
while(err>-1)
{
fread(buffer,sizeof(buffer),1,fichier);
// scanf("%s",buffer);
err=send(sock,buffer,sizeof(buffer),0);
memset(buffer,0,sizeof(buffer));
}
printf("Connection terminée\n\n");
WSACleanup();
system("PAUSE");
return 0;
}
Er pour l'indentation, tu ne peux pas faire mieux ?Citation:
Envoyé par smoove
Code::Blocks : Plugins / Code formatter
:bravo: +1 indentation !Citation:
Envoyé par Emmanuel Delahaye
oups! c'est vrai que c'est du C j'avais pas fait gaffe mais.... le resultat et la.
Arretez d'utiliser le C pour faire des taches d'administration...