Veröffentlicht 18. Februar 200322 j 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!
18. Februar 200322 j 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.
18. Februar 200322 j Danke Schön! Dann werd ich mal versuchen das mein Prog weiterlaufen kann auch während es noch wartet.:cool:
18. Februar 200322 j 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.
18. Februar 200322 j *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!
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.