Willkommen ~Gast!
Registrieren || Einloggen || Hilfe/FAQ || Staff
Probleme mit der Registrierung im Forum? Melde dich unter registerEin Bild.
Autor Beitrag
000
24.12.2001, 18:11
Nicemice
Moderator


Also ich meiner Message (vom Client an den Server) versuche ich 5 Strings hintereindander zu schicken:

write_string(...);
write_string(...);
write_string(...);
write_string(...);
write_string(...);

Wenn ich die Strings auf der Clientseite auslesen will, (5 * read_string()) bekomme ich immer nur der letzten geschriebenen String zurück. Und ja, ich habe alles Strings mit \0 terminiert. Hilft nix, was nun ?

--

www.d3opencoop.com - A Doom3 Cooperative Mod

zum Seitenanfang zum Seitenende Profil || Suche
001
25.12.2001, 13:48
Nicemice
Moderator


ok, hier der source dazu:
serverside:
Quellcode:
MESSAGE_BEGIN( MSG_ONE, gmsgMissionInfo,NULL,pPlayer->edict());
WRITE_BYTE (m_iMissionID );
WRITE_BYTE (m_iMissionType );
WRITE_BYTE (m_iMissionStatus );
WRITE_BYTE (iMissionOp );
WRITE_STRING (m_pTextVars);
WRITE_STRING (m_pReward_PrePayment);
WRITE_STRING (m_pReward_PartComplete);
WRITE_STRING (m_pReward_Complete);
WRITE_STRING (m_pReward_Failed);
MESSAGE_END();

clientside:
Quellcode:
BEGIN_READ( pbuf, iSize);
int iMissionID = READ_BYTE();
MissionType iMissionType = (MissionType)READ_BYTE();
MissionStatus iMissionStatus = (MissionStatus)READ_BYTE();
MissionOp iAddRemove = (MissionOp)READ_BYTE();
char *pTextVars= READ_STRING();
char *pPrePayment= READ_STRING();
char *pPartComplete = READ_STRING();
char *pComplete= READ_STRING();
char *pFailed= READ_STRING();

--

www.d3opencoop.com - A Doom3 Cooperative Mod

zum Seitenanfang zum Seitenende Profil || Suche
002
25.12.2001, 14:01
Nicemice
Moderator


HoHOHo. Ich habe gerade den Fehler gefunden. *freu*
So muß es Clientside aussehen:
Quellcode:
static char szBuf[5][32];
BEGIN_READ( pbuf, iSize);
int iMissionID = READ_BYTE();
MissionType iMissionType = (MissionType)READ_BYTE();
MissionStatus iMissionStatus = (MissionStatus)READ_BYTE();
MissionOp iAddRemove = (MissionOp)READ_BYTE();
char *pTextVars= READ_STRING();
pTextVars = strcpy (szBuf[0], pTextVars);
char *pPrePayment= READ_STRING();
pPrePayment = strcpy (szBuf[1], pPrePayment);
char *pPartComplete = READ_STRING();
pPartComplete = strcpy (szBuf[2], pPartComplete);
char *pComplete= READ_STRING();
pComplete = strcpy (szBuf[3], pComplete);
char *pFailed= READ_STRING();
pFailed = strcpy (szBuf[4], pFailed);

thx, to archangel

--

www.d3opencoop.com - A Doom3 Cooperative Mod

zum Seitenanfang zum Seitenende Profil || Suche
003
25.12.2001, 14:35
thinktank



Und warum ? :)

Bei den anderen Messages in HL scheints ja auch ohne das Zeug zu gehen ...

--

zum Seitenanfang zum Seitenende Profil || Suche
004
25.12.2001, 14:57
Nicemice
Moderator


nein, schau dir mal die MSGs an bei denen mehrere Strings hintereinander verschickt werden...

--

www.d3opencoop.com - A Doom3 Cooperative Mod

zum Seitenanfang zum Seitenende Profil || Suche
005
25.12.2001, 16:14
thinktank



stimmt * spamm * :D

Aber warum ?

Das sieht ziemlich sinnlos aus :

char* str = READ_STRING();
char* str = strcpy(szBuf[0], str);

Der Variable wird doch der gleiche Wert zugewiesen wie vorher ! o_O ??

--


Dieser Beitrag wurde am 25.12.2001 um 16:23 von thinktank bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
006
26.12.2001, 09:51
Nicemice
Moderator


Ich glaub, das is so: str ist ja jediglich ein pointer auf deine speicherstelle, die irgendwann mit einem Zerobyte terminiert wird. Scheinbar verändert READ_STRING() die Speicherstell dahingehend, das der vorherige String 'rausgeschnitten' wird, und der Nächste 'nachrückt'.

Deshalb kopiert man jetzt den String in szBuf und referenziert den Pointer neu.

--

www.d3opencoop.com - A Doom3 Cooperative Mod

zum Seitenanfang zum Seitenende Profil || Suche
007
26.12.2001, 12:46
thinktank



Hmm, könnte SEHR gut sein :)

Man vergisst halt oft, dass char* doch ein Zeiger ist und nicht ein "ganz normaler" string :)

--


Dieser Beitrag wurde am 26.12.2001 um 12:46 von thinktank bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche