Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

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

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.

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.
  • Autor

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

Suchst du Betatester für dein Programm? Ich bin dabei! :D

:( Aber wenn's fertig ist, stellste's online und wir können's alle ausprobieren! ;)

(Ist dann doch wohl Freeware, oooder????) :D

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).

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)

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.