[socket] wiedermal eine frage...

hacky20

Grünschnabel
Code:
char empf[256];
    fd_set fdSetRead; 
    TIMEVAL timeout; 

    FD_ZERO(&fdSetRead); 
    FD_SET(s,&fdSetRead); 
    timeout.tv_sec=0; 
    timeout.tv_usec=0; 
 
    while((rc=select(0,&fdSetRead,NULL,NULL,&timeout))>0) 
	{ 
		rc=recv(s,empf,1023,0); 

        if(rc==0) 
		MessageBox(WinClient_window, "Server geschlossen!", "Fehler", MB_OK | MB_ICONERROR | MB_SETFOREGROUND);   
        else if(rc==SOCKET_ERROR)  
            MessageBox(WinClient_window, "Fehler", "Fehler", MB_OK | MB_ICONERROR | MB_SETFOREGROUND);        

		empf[rc]='\0';

		if(empf[256] = '1')
		{
			MessageBox(WinClient_window, "test", "test", MB_OK | MB_ICONERROR | MB_SETFOREGROUND); 
		}
    }

das ist ein stück code auf meiner client seite .. wenn der client "1" empfängt soll er eine messagebox aufmachen wo etwas drin steht... funktioniert alles dann öffnet er die messagebox und dann steht :
Run-Time Check Failure #2 - Stack around the variable 'empf' was corrupted.
aber es liegt nicht an der messagebox weil wenn ich da nen andren code rein gebe beendet er auch... und auf der serverseite funktioniert das ganze komischerweise
wenn jemand weiß wo der fehler liegt bitte sagen ^^
danke schonmal
 
Code:
char empf[256];

...

rc=recv(s,empf,1023,0);
Du reserviert für "empf" 256 Bytes, willst aber 1023 einlesen. Falls mal mehr als 256 Bytes gesendet werden, gibt das den klassischen Buffer Overflow.
Code:
if(empf[256] = '1')
Den Sinn dieses Vergleichs verstehe ich nicht ganz. Zum einen muss der Vergleich mit "==" ausgeführt werden und zum anderen testest du eine Position außerhalb des reservierten Bereiches. Die Indizes beginnen immer mit 0 und laufen in deinem Fall von 0 bis 255. An welcher Stelle in den empfangenen Daten soll den eigentlich die '1' stehen, auf die du prüfen willst?

Gruß
MCoder
 
ah es lag natürlich an dem doppelten = xD ich depp...

ah das mit den 1023 ist mir garnicht aufgefallen das war so im tutorial..

naja danke!

und ja da hab ich mich verschrieben ich will natürlich den bereich 0 überprüfen
 
Zurück