Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

Hallo,

Probleme treten dann auf, wenn Du halbe Strings im Empfangspuffer hast, da diese nicht mit "0" terminiert werden. Ich würde eine eigene Empfangsroutine schreiben, die bei jedem Aufruf genau einen Null-Terminierten String zurückliefert und dabei auch Puffergrenzen mit beachtet.

Nic

Geschrieben

Ich hatte mal so was ähnliches:

currentmsg ist ein std::string, msgqueue ist ein std::queue<std::string>.

Beide müssen außerhalb der Funktion deklariert sein (z.B. als Instanzvariablen einer Klasse).

Die Parameter der Funktion sind der Puffer, den recv gefüllt hat, und die Anzahl der empfangenen Bytes.

void ProcessData(char *buffer, int size)
{
for( int i=0; i<size; ++i ) {
if( buffer[i] == '\0' ) {
msgqueue.push( currentmsg );
currentmsg = "";
continue;
}
currentmsg += buffer[i];
}
}[/CODE]

Die Queue kannst du dann z.B. mit einem anderen Thread abarbeiten. Dann solltest du aber die Zugriffe auf die Queue synchronisieren.

Geschrieben
Originally posted by Guybrush Threepwood

was ist den pBuffer?

Ein Schreibfehler. Hab's geändert.

Ist das nicht so etwas wie ich vorgeschlagen hatte?
Wenn es das ist, was du mit "Variable wechseln" meintest, ja. Aber die Funktion kann auch unvollständige Strings verarbeiten.
Geschrieben

So, jetzt scheint alles zu klappen:D

Ich hab deine Funktion etwas abgeändert Klotzkopp, aber vom

Prinzip her ist es die Selbe:


void ProcessData(char *buffer, int size)
{
int nPos=0;
nAnzahl=0;
for( int i=0; i<size; ++i )
{
if( buffer[i] == '\0' )
{
lpCurrentMsg = (char*)realloc(lpCurrentMsg,_msize(lpCurrentMsg)+1);
lpCurrentMsg[nPos] = '\0';
if (lpMessages == NULL)
lpMessages = (char**)calloc(1,sizeof(char*));
else
lpMessages = (char**) realloc(lpMessages,_msize(lpMessages) + sizeof(char*));
lpMessages[nAnzahl] = (char*) calloc(strlen(lpCurrentMsg)+1,sizeof(char));
strcpy(lpMessages[nAnzahl],lpCurrentMsg);
free(lpCurrentMsg);
lpCurrentMsg = NULL;
nAnzahl++;
nPos=0;
continue;
}
if (lpCurrentMsg == NULL)
lpCurrentMsg = (char*)calloc(1,sizeof(char));
else
lpCurrentMsg = (char*)realloc(lpCurrentMsg,_msize(lpCurrentMsg)+1);
lpCurrentMsg[nPos] = buffer[i];
nPos++;
}
}
[/PHP]

Ich hoffe es entstehen nicht zuviele Speicherlecks:rolleyes:

Danke euch beiden, ihr habt mir sehr geholfen.

Gruß

Guybrush

Geschrieben
Originally posted by Guybrush Threepwood

Wenn du chatten willst dann kuck mal oben in die Leiste von

Fachinformatiker.de direkt neben Forum.

:confused: Jaaa, neee, is schon klar!!! :P

Ich hab nur vor einiger Zeit auch mal so ein Tool programmiert (allerdings in VB).

Deshalb hätte mich deines interessiert. Außerdem würde ich es im internen Betrieb einsetzten (mit Kollegen).

Geschrieben

Ich hab mein Tool ja schon lange fertig!!!

Es funktioniert ein bißchen simpel aber es funktioniert.

Mein Konzept:

Jeder Benutzer kann als Server fungieren. Dazu erstellt er einfach auf einer Freigabe, die für alle verfügbar ist, eine Session. Die Nachrichten werde in einer Textdatei dort abgelegt und jeder angemeldete Benutzer holt sich die neuesten Nachrichten dort ab und markieren sie als von sich gelesen. Somit bekommen auch nachträglich angemeldete Benutzer den vorangegangenen Thread mit. Leider hab ich nur noch irgendwo das Tool aber nicht mehr den Quelltext. :rolleyes:

Aber ist ja auch egal, denn:

"Visual Basic ist für Mädels. Echte Männer programmieren in C(++)."

(Microsoft-Mitarbeiter auf der CeBit)

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...