C でクライアント サーバー プログラムを作成しています。ディレクトリ名を送信し、応答としてファイルのリストを受信します。私が抱えている問題は、無限ループに陥ることです。
ディレクトリ名を 1 つだけ送信すると機能しますが、ディレクトリのリストを送信すると終了せず、何も出力されません。
サーバ
while(recv(sock, name, BUFSIZE, 0) > 0){
if ((fddir=opendir(name)) == NULL){
send(sock, strerror(errno), strlen(strerror(errno)), 0);
close(sock);
return 1;
}
send(sock, name, strlen(name), 0);
send(sock, ":", strlen(":"), 0);
send(sock, "\n", strlen("\n"), 0);
while ((dirbuf = readdir(fddir)) != NULL){
buf[0] = '\0';
strcat(buf, dirbuf->d_name);
strcat(buf, "\t");
send(sock, buf, BUFSIZE, 0);
}
}
クライアント
for (int i=1;i<3;i++){
send(sock, argv[i], strlen(path), 0);
while(recv(sock, buf, BUFSIZE, 0) > 0)
printf("%s", buf);
}
サーバーはすべてのディレクトリ名が受信されるまで待機し、クライアントはサーバーがその中のすべてのファイルを送信するまで待機します。プログラムが動かなくなった場所を追跡するにはどうすればよいですか?