PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Funktion sendet Variable bevor diese gesetzt ist.



scar
21-10-2006, 14:58
Hi,
habe gerade nen ganz krankes Problem.
Hab mir ein schönes Netzwerkprogramm mit SDL_net gebaut.
Das sendet nen Integerwert an einen Server.
Leider wird dieser Integerwert erst nach dem senden mit dem Wert 2 belegt.
Und das tolle Programm sendet dann -1077115739.
Das regt mich tierisch auf denn ich bin vollkommen machtlos das der Compiler meinen Code so übersetzt.
Was kann ich dagegen machen?


/* Now we need to tell send the server the port we listen on and
* that we are ready to handle clients and want to time the universe.
*/
if( SDLNet_ResolveHost( clientIp, _serverIp, conf.getServerPort() ) == -1 )
{
std::cerr << "SDLNet_ResolveHost: " << SDLNet_GetError() << std::endl;
return false;
}
//scClient is used here to connect to the server, later for new clients
if( !( scClient = SDLNet_TCP_Open( clientIp ) ) )
{
std::cerr << "SDLNet_TCP_Open: " << SDLNet_GetError() << std::endl;
return false;
}

int id=2; //the server has to know that this is the timer
SDLNet_TCP_Send( scClient, &id, sizeof(int) );

bool exists; //there are no 2 timers allowed
SDLNet_TCP_Recv( scClient, &exists, sizeof(bool) );


Dieses Programm dagegen funktioniert, obwohl es die gleichen Werte hat:


if( SDLNet_ResolveHost( ip, "127.0.0.1", 5723 ) == -1 )
{
std::cerr << "could not resolve\n";
}
s=SDLNet_TCP_Open(ip);
if(!s)
std::cerr << "failed to open\n";
int id=2;
SDLNet_TCP_Send( s, &id, sizeof(int));
bool exists;
SDLNet_TCP_Recv( s, &exists, sizeof(bool));
if(!exists)
{
int port=5724;
SDLNet_TCP_Send(s,&port, sizeof(int));
SDLNet_TCP_Close( s );
std::cout << "success\n";
}
else
{
std::cout << "failure\n";
}

Joghurt
21-10-2006, 15:39
Aufgrund deiner Signatur frage ich mal: nutzt du irgendwelche speziellen Compileroptimierungsflags?

scar
21-10-2006, 15:48
Nein ist selbstgeschrieben und in Anjuta hab ich nichts angegeben.