PuppetMaster Geschrieben 18. Februar 2003 Geschrieben 18. Februar 2003 Moin Leutz! Ich hab hier ein Problem bezüglich Sockets. wenn ich das accept() aufrufe hält mein Prog an und lässt nichts mehr mit sich machen. Ich muss es dann immer abbrechen und ich weiß nicht warum. Ich bekomm nicht mal ne Fehlermeldeung!!! Weiterhin schreibt mir das Prog auch nichts mehr in meine Listbox. Wenn ich aber mit Haltepunkten arbeite und schritt für schritt durchgehe, dann zeigt er mir die Ausgaben an.Warum? Keine Ahnung *ratlosbin* :confused: Hier mal der Hauptteil von meinem Code: void MySniffer::lookforip(void) { int len = sizeof(sockaddr_in); int len2 = sizeof(sockaddr); int option_flag; //Socket wird auf Lokalen Server gebunden, bei Fehlschlag gib den Error aus if(bind(ServerSocket, (sockaddr*)&ServerSAddr, sizeof(ServerSAddr)) == SOCKET_ERROR) { Form1->ListBox1->Items->Add("Binding Socket failed: " + (AnsiString)WSAGetLastError()); return; } //Socket-Optionen werden festgelegt if(setsockopt(ServerSocket, SOL_SOCKET, SO_REUSEADDR, (char*)&option_flag, sizeof(option_flag)*2) == SOCKET_ERROR) { Form1->ListBox1->Items->Add("Setting Socket-Options failed: " + (AnsiString)WSAGetLastError()); return; } //Port wird abgehört, bei Fehlschlag gib den Error aus if(listen(ServerSocket, 5) == SOCKET_ERROR) { Form1->ListBox1->Items->Add("Listening on Socket failed: " + (AnsiString)WSAGetLastError()); return; } //Endlosschleife for(; { //bei Anfrage akzeptiere Verbindung ClientSocket = accept(ServerSocket, (sockaddr*)&ClientSAddr, &len); //wenn der ClientSocket nicht erstellt werden konnte gib den Error aus if(ClientSocket == INVALID_SOCKET) { Form1->ListBox1->Items->Add("Initializing Client-Socket failed: " + (AnsiString)WSAGetLastError()); break; } //Ausgabe des Remote-Hostnamens, bei Fehler gib den Error aus if(getpeername(ClientSocket, (sockaddr*)&ClientSAddr, &len2) == SOCKET_ERROR) { Form1->ListBox1->Items->Add("Getting Peername of Client-Socket failed: " + (AnsiString)WSAGetLastError()); } else { IP = inet_ntoa(ClientSAddr.sin_addr); Form1->ListBox1->Items->Add(IP); } Sleep(1000); } } [/php] P.S. das Ganze befindet sich in einer Klasse die ich geschrieben hab; der ServerSocket wird in einer anderen Methode initialisiert Ich hoffe ihr könnt mir helfen? Danke! Zitieren
Guybrush Threepwood Geschrieben 18. Februar 2003 Geschrieben 18. Februar 2003 Von wem soll den accept() eine Verbindung entgegennehmen? Das an der Stelle dein Programm stehen bleibt ist eigentlich normal weil accept solange wartet bis eine Verbindungsanfrage kommt, dann versucht es diese entgegenzunehmen und dann macht erst dein Programm weiter. Zitieren
PuppetMaster Geschrieben 18. Februar 2003 Autor Geschrieben 18. Februar 2003 Danke Schön! Dann werd ich mal versuchen das mein Prog weiterlaufen kann auch während es noch wartet.:cool: Zitieren
Guybrush Threepwood Geschrieben 18. Februar 2003 Geschrieben 18. Februar 2003 Originally posted by PuppetMaster Danke Schön! Dann werd ich mal versuchen das mein Prog weiterlaufen kann auch während es noch wartet.:cool: Versuch`s mal mit nem 2.Thread. Zitieren
PuppetMaster Geschrieben 18. Februar 2003 Autor Geschrieben 18. Februar 2003 *freudenschrei* es klappt!!! Ich habs jetzt mit Hilfe von Threads gelöst. ich hab den Teil mit accept() per Thread aufgerufen und jetzt läuft mein Programm! Juhu :D Danke! Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.