-3
我正在寫一個簡單的程序來將文件從一個點傳輸到另一個。該應用程序應該出現的選項
1.列表中的文件
2.下載文件
3.上傳文件
但是,一旦我選擇了選項1.它列出目錄的內容,我送一個文件名通過一個,但所有的名字都出現在客戶端的一行中。不知道爲什麼..不從開關案件
然後它卡在標記循環內,一旦recv完成,它應該從循環中出來,它應該再次提供操作選項。我不確定問題是什麼。 這裏是我的代碼..
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;
}
}
它不工作,直到。問題出在'while((rdata = recv(sockfd,filename,sizeof(filename),0))> 0)'line。當你使用'recv()'而沒有循環時,它可以正常工作。我想它被卡在循環內 – surjit
請編輯您的答案或刪除它..這不是確切的答案 –