Seltsames recv Problem
-
Hi,
ich hoffe ich bin mit meinem Neztwerkroblem hier richtig. Ist aber meiner Meinung nach nur ein inderektes Netzwerkproblem.So .. jetzt aber zu meinem Programm ^^
Ich habe einen Server, welcher Befehle von einem Client erhält, diese bearbeitet, und das ergebnis zurückschickt.
Bei meinem Fehlerhaften Befehlt handelt es sich um einen "Dir"-befehl (auslesen von verzeichniss).
Das seltsame daran ist, dass der code beim ersten Aufruf funktioniert und beim zweiten mal nicht mehr!

Hier der dazugehörige Code:
if (command == "dir") { char dir_list[MAX_PATH + 1]; enterlock = 1; WIN32_FIND_DATA FindFileData; HANDLE hFind = INVALID_HANDLE_VALUE; char DirSpec[MAX_PATH + 1]; // directory specification DWORD dwError; strncpy (DirSpec, working_dir, strlen(working_dir) ); strncat (DirSpec, "\\*", 3); hFind = FindFirstFile(DirSpec, &FindFileData); if (hFind == INVALID_HANDLE_VALUE) { return (-1); } else { strncpy (dir_list, "Current dir: \n", 12); strncat (dir_list, working_dir, strlen(working_dir) ); strncat (dir_list, "\n", 2); strncat (dir_list, FindFileData.cFileName, strlen(FindFileData.cFileName) ); strncat (dir_list, "\n", 2); while (FindNextFile(hFind, &FindFileData) != 0) { strncat (dir_list, FindFileData.cFileName, strlen(FindFileData.cFileName) ); strncat (dir_list, "\n", 2); } dwError = GetLastError(); FindClose(hFind); if (dwError != ERROR_NO_MORE_FILES) { return (-1); } } rc=send(connectedSocket,dir_list,strlen(dir_list),0); } //######################## ende der abfrage ob ein dir ausgeführt wurdeund jetzt etwas .. wo man vll. einen Lösungsansatz dazu finden könnte,
hab schon viel probiert aber nichts hat genutzt.Wenn man nämlich .. folgenden Code dazwischen aufruft .. (ein chdir)
dann kann man danach wieder ein DIR aufrufen!!//################################################ dir auslesen if (command == "chdir") { enterlock = 1; char dir_temp[MAX_PATH + 1], dir_list[MAX_PATH + 1]; sprintf(buf2,"Path:"); rc=send(connectedSocket,buf2,strlen(buf2),0); while(readready == 0) { rc=recv(connectedSocket,dir_temp,100000,0); dir_temp[rc]='\0'; strcpy(working_dir, dir_temp); readready = 1; } readready = 0; sprintf(buf2,"Current Directory: %s", working_dir); rc=send(connectedSocket,buf2,strlen(buf2),0); } //################################### ende des chdir blocksWie kann das sein,
dass es nur dann geht, wenn man ein chdir dazwischen aufruft??
Hoffe jemand von euch kann mir da helfen, weiß echt nicht mehr weiter...
-
Ein potientieller Fehler ist die Variable dirlist.
MAX_PATH ist die maximale Länge eines Verzeichnisnamen, also so was wie
\\huge\peter\harry.txtDu packst da aber den ganzen Inhalt eines Verzeichnisses rein. Kann also passieren, dass Du munter bei Dir irgendwo in den Speicher schreibst.
Falls ausserdem die Variable enterlock irgendwas in Deinem restlichen Code zu bedeuten hat und auch nur entfernt was mit einer Sperre zu tun hat, könnte das ein weiteres Problem sein.
-
Dies ist kein C/C++ Forum sondern ein C++ Forum.
