[c++/flash]serververbindung

kickerxy123

Erfahrenes Mitglied
Hallo!

Code:
if(true){
if(start == false){
         if(cur_clients >1){
                        start = true;
                        for(short t = 0; t < MAX_CLIENTS; t++){
                                  if(clients[t]!=INVALID_SOCKET){if(true){
                                                                 msgl[0]='7';
                                                                 msgl[1]='\0';
                                                                 send(clients[t],msgl,(int)strlen(msgl)+1,0);
                                                                
                                                                 cout << "Spiel kann starten!"<<endl;
                                                                 cout << msgl << endl;
                                                                 }
                                                                 }
                                  }
         }
}
}
sollte also wenn 2 oder mehr Clienten verbunden sind(cur_clients) und wenn das Spiel noch nicht läuft (start == false) an alle Clients msgl senden.
Tut er auch, allerdings kommt bei den Clienten immer raus:

"Viereck 7"
also ohne " " und ohne Leerzeichen. Viereck ist dieses typische weiße Kastending, dass erscheint, wenn er keine Ahnung hat, was für ein Zeichen das ist.

allerdings sagt cout << msgl : "7"

der Client ist ein Flash Client, Flash 8 Basic.
dort hab ich mit trace(message) eben besagtes viereck mit 7 herausbekommen.

Woran kann es liegen?

edit:
Code:
while(msg[0] != intToChar(i)){
  if(!strcmp("ID_REQUEST",buf)){  //wenn buf == ID_REQUEST!
         msg[0] = intToChar(i);
         msg[1] = '\0';
     send(clients[i],msg,3,0); 
     cout << "Antwort: " << msg[0] << endl;
     //break;    
         }else{
                       rc=recv(clients[i],buf,256,0); //versuche nochmal
              }
}
ist kurz davor im Quelltext und sendet korrekterweise dem Clienten msg[0] = intToChar(i);
(ist vielleicht komplizierter zu erklären, was das dort soll, aber es läuft auch ohne das ein Viereck gesendet wird!)

und ich hab herausgefunden:

wenn ich statt
Code:
                                                                 msgl[0]='7';
                                                                 msgl[1]='\0';
                                                                 send(clients[t],msgl,(int)strlen(msgl)+1,0);
das schreibe:
Code:
                                                                 msgl[0]='7';
                                                                 msgl[1]='\0';
                                                                 send(clients[t],msgl,(int)strlen(msgl)+1,0);
                                                                 send(clients[t],msgl,(int)strlen(msgl)+1,0);
                                                                 send(clients[t],msgl,(int)strlen(msgl)+1,0);
                                                                 send(clients[t],msgl,(int)strlen(msgl)+1,0);
kommt an:
"viereck7"
"17"
"27"
"37"
"......usw"

ich bin ratlos..
hieße also das das Viereck vermutlich eine 0 darstellt. nur warum?
 
Zuletzt bearbeitet:
Ich kenn mich mit Flash nicht so aus, da du aber sagst, das im C Code alles (vermutlich) richtig läuft. Würde ich darauf tippen, das irgendwas, beim transfer zu Flash schief geht.
Was mir jetzt so einfällt:
1. Erwartet Flash den ein 0 Terminierten String?
2. Gibt es vieleicht Codierungs schwirigkeiten? Vieelicht erwartet Flash ein UTF16 oder ähnliches?

Edit:
Und was mir gerade noch auffält, da wo du meinst, das es richtig übertragen wird. Kann es sein, das du dort 1 Zeichen zu viel übermittelst?
da sind ja nur 2 Zeichen, aber du übergibst als länge 3.
 
Zuletzt bearbeitet:
danke für deine Antwort!
ich habe inzwischen alles noch mal sauber neu aufgebaut - und siehe da, das Problem besteht nicht mehr =)
vielleicht lags auch an dem 3 statt 2 Zeichen, ich vermag es nicht mehr zu sagen - hauptsache es geht jetzt, anyway... danke


lg
kickerxy
 
Zurück