Ich versuche, einfache TCP-Client und Server-Programm zu schreiben. Das Serverprogramm muss die Liste der Dateien in seinem Standardverzeichnis an das Clientprogramm senden. Der Client wählt dann eine Datei aus, und der Server gibt den Inhalt dieser Datei zurück. Ich habe alle grundlegenden Verbindungen, aber ich bin fest, wie man die Liste der Dateien an den Client bekommt. Irgendwelche Ideen? TIASo senden Sie eine Liste von Dateien im Standardverzeichnis an den Client vom Server
0
A
Antwort
0
die Liste der Dateien in einem Verzeichnis zu erhalten ist im Moment sehr systemabhängig:
- auf Linux und Posix, würden Sie
opendir()
undreaddir()
und verwandte Funktionen verwenden. - auf Fenster, dann würden Sie
FindFirstFile()
,FindNextFile()
, andFindClose()
oder ähnliches verwenden (wieFindFirstFileEx()
)
Zum Glück gibt es boost::filesystem
, die ein tragbares directory iterator bietet.
Die gute Nachricht ist, dass filesystem
bald der C++ - Standardbibliothek beitreten wird. Einige Compiler, wie MSVC und gcc, bieten sie bereits als experimentelle Erweiterung und es ist sehr, sehr nahe zu steigern:
path dir { "." };
for (auto& p : recursive_directory_iterator(dir)) {
cout << "Sending "<<p<<endl; // dir_entry using recursive browsing
//... todo: send file
}
[Verwenden 'send'] (http://linux.die.net/man/2/ senden). Stellen Sie sicher, dass Sie Ihr Kommunikationsprotokoll so definieren, dass der Empfänger weiß, wann er die gesamte Nachricht gelesen hat und lesen kann. Am einfachsten ist es, die Länge der Nachricht vor dem Senden der Nachricht zu senden oder das Ende der Nachricht mit einem Terminator wie NULL zu markieren. – user4581301
ja ich bin vertraut mit der Funktion send(), aber wie würde ich die Liste der Dateien in den Puffer bekommen, um über send() zu senden? – jynx678
Das ist leider Betriebssystemabhängig. Antwort 2 hier sollte helfen: http://stackoverflow.com/questions/612097/how-can-i-get-the-list-of-files-in-a-directory-using-c-or-c – user4581301