J'écris un programme simple pour le transfert de fichiers d'un point à un autre. L'application devrait présenter l'option
1. Liste des fichiers
2. télécharger un fichier
3. télécharger un fichier
Mais une fois que j'ai choisi l'option 1. liste le contenu du répertoire, j'envoie les noms de fichiers un par un mais, mais tous les noms apparaissent dans une seule ligne sur le côté client. Ne peut pas comprendre pourquoi ..pas comming hors de l'interrupteur cas
Et puis il est coincé à l'intérieur de la boucle marquée, il devrait sortir de la boucle une fois recv est terminée et il doit présenter les options de l'opération à nouveau. Je ne suis pas sûr du problème. Voici mon code ..
server.c
while(1){
//receive chosen option to be performed
if((rdata = recv(clnt, &x, sizeof(int), 0)) > 0){
opt = ntohl(x);
switch(opt){ //switch option and operate
case 1 : //option 1- transfer contents of the directory
if((dr = opendir(".")) != NULL){
while((de = readdir(dr)) != NULL){ //open directory
sprintf(filename, "%s",de->d_name);
rdata = send(clnt, filename, strlen(filename), 0); //transfer filenames
}
}
break;
}
client.c
while(1){ //this loop should continue after performing one option
printf("1. List available files on the server\n");
printf("2. Download a file\n");
printf("3. Upload a file to the server\n");
scanf("%d", &opt); //enter desired option
x = htonl(opt); //convert to network byte order
if(send(sockfd, &x, sizeof(int), 0) < 0){ //send option
perror("client: send");
continue;
}
switch(opt){
case 1 :
/************************************************************************/
while((rdata = recv(sockfd, filename, sizeof(filename), 0)) > 0){
filename[rdata] = '\0';
printf("> %s\n", filename);
}
/***********************************************************************/
break;
}
}
Il ne fonctionne pas. Le problème est en ligne 'while ((rdata = recv (sockfd, nom de fichier, sizeof (nom de fichier), 0))> 0)'. Lorsque vous utilisez 'recv()' sans boucle, cela fonctionne très bien. Je suppose qu'il est coincé à l'intérieur de la boucle – surjit
modifier votre réponse s'il vous plaît ou le supprimer .. ce n'est pas la réponse exacte –