Programm stützt nach einer Zeit ab



  • 1. Fehler:

    AmEnde schrieb:

    HI,
    "Ich" progge gerade ...

    Kann dann eh nichts bei rum kommen, lerne lieber programmieren

    2. Fehler:

    AmEnde schrieb:

    int recvData(HWND hWnd)
    {
    
    	if(rc!=SOCKET_ERROR) //<-- Warum wird hier geprüft, wenn rc noch nichts hat?
    	{
    		rc=recv(s,buf,256,0);
    		if(rc==0)
    		{
                       /* Das, aus Tutorials, Kopierte, wird als Komentar gesetzt, neue Form der Informierung */
    		//printf("Server hat die Verbindung getrennt..\n");
    			SetDlgItemText(hWnd,IDDISPLAY,"Server hat die Verbindung getrennt..");
    			return 1;
    		// break;
    		}
    		if(rc==SOCKET_ERROR)
    		{
    		//printf("Fehler: recv, fehler code: %d\n",WSAGetLastError());
    			SetDlgItemText(hWnd,IDDISPLAY,"Fehler: recv...gescheitert!");
    			return 1;
    		//break;
    		} 
                      /* nen weiteres if wäre nicht schlecht */
    		buf[rc]='\0';
    		//printf("\nServer antwortet: %s\n",buf);
    		buf[rc+1]='\n'; //<-- Zeilenumbruch hinter Buffer ende???
    		SetDlgItemText(hWnd,IDDISPLAY,buf);
    	}
    	else
    	{
    		SetDlgItemText(hWnd,IDDISPLAY,"Fehler: recv"); // SICHER???
    	}
    	return 0;
    }
    

    wenn ich den aufruf von recvData rausnehmme geht alles prima-bis das ich keine daten empfangen kann-nur senden

    Ganz genau, schaue dir mal deine Funktion genauer an und benutze mal den Debuger, wenn du dann siehst wo das Programm abstürzt durch eine Schutzverletzung, müßte dir einiges klar werden, wenn nicht - siehe 1.

    3. Du kannst das auch mit in eine Schleife nehmen, hauptsache du hast auch die Message bearbeitung mit drin.



  • HI,
    Thx erstmal...
    Ich habe recvData in die message loop gepackt aber das Problem ist geblieben...ich habe keine Ahnung woran es liegt....
    gibt es noch eine andere Funktion zum empfangen außer recv(); ?

    MFG AmEnde



  • Du hast bereits Hilfe bekommen. Wenn du sie ignorierst können wir dir auch nicht mehr helfen.



  • HI,
    ich habe alles befolgt...ich hab jeden kritiktpunkt beseitigt und den debugger benutzt der mir nichts sagt außer das, wenn der bei recv(); angekommen ist alles abstürtzt....

    MFG AmEnde



  • AmEnde schrieb:

    und den debugger benutzt der mir nichts sagt außer das, wenn der bei recv(); angekommen ist alles abstürtzt....

    Also mein Debugger sagt nie "Alles stürzt ab....". Der hat immer viel längere Meldungen. Der sagt mir z.B. auch, welchen Wert die Parameter von recv haben usw. 🙄



  • HI,
    wenn mir sagen die parmeter nichts...rc isr 0 buff ist leer und s ist 1964...aber sonst zeigt der debuuger wirklich nichts. Und das programm macht nicht weiter...

    MFG amEnde



  • Kann es sein, dass recv einfach nur wartet? Wie und wo wird diese recvData-Funktion denn aufgerufen?



  • HI,
    die recv(); wird durch einen timer alle halbe sec aufgerufen...daran hab ich noch nicht gedacht das die eifach wartet...gibs den einen weg das die einfach eine buffer ausliest ob was angekommen ist und wenn das buffer leer ist das die dann nicht wartet bis etwas angekommen ist....so etwas in der art wie kbhit() ....

    MFG AmEnde



  • recv wartet solange bis der buffer voll ist, da geht kein weg dran vorbei, ich würde dir aber zu multithreading raten: der thread, in dem recv drin ist, kann dann ohne probleme warten, während das hauptprogramm oder ein anderer thread alles andere erledigt.



  • da geht kein weg dran vorbei

    Doch. Den Socket einfach auf non-blocking setzen mit ioctlsocket.


Anmelden zum Antworten