C/C++ Kuriosität. Cout zum falschen Zeitpunkt!

lenn1

Mitglied
Thread Starter
Mitglied seit
11.10.2005
Beiträge
194
Ich schreibe ein Programm, dass mir den Callmonitor Stream der Fritzbox ausliest und dann im Terminal ausgeben soll:

Code:
Anruf!
nr:01511234567
Habe dabei folgendes Problem:
Beim 1. Anruf kommt nur das:

Code:
Anruf!
Beim 2. Anruf dann das:
Code:
nr:01511234567Anruf!
Das Programm gibt mir also ab dem 2. Anruf immer nur aus, wer letztesmal angerufen hat. Das hilft mir herzlich wenig.
Da die ausgaben in einem Block stehen muss es doch funktionieren!
Ich verstehe hier gar nix mehr .. :(

(Unter Linux das gleiche Problem.)


Code:
#include <iostream.h>
#include <string.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <netinet/in.h>

using namespace std;


string AnruferNummer(string anrufString)
{
    string temp(anrufString);
    temp = temp.substr(25);
    ssize_t pos = temp.find(';');
    temp = temp.substr(0,pos);
    return temp;
}

int main () 
{
    try 
    {                       
        
        ///////// Connecting..  /////////
        sockaddr_in remote_addr;
        remote_addr.sin_family  = AF_INET;
        remote_addr.sin_port = htons(1012);
        remote_addr.sin_addr.s_addr = inet_addr("192.168.178.1");

        int sfd = socket(AF_INET, SOCK_STREAM, 0);
        if(sfd == -1)
            throw "socket";
        int con = connect(sfd, (struct sockaddr*)&remote_addr, sizeof(remote_addr));
        if(con == -1)
            throw "connect";
        
        /////////////////////////////////
        
        char buffer[100];
        ssize_t len  = 100;
        string anrufer;
        
        while(true)
        {

        ssize_t rec = recv(sfd, buffer, len, sizeof(remote_addr));
        if(rec == -1)
            throw "receive";
           
            
        if(strstr(buffer,"RING") != NULL)
            {
                cout << "Anruf!" << endl;
                cout << endl << "nr: " << AnruferNummer(buffer);
            }

        }
         
        
        
    } 
    catch (char*fehler) 
    {
        cout << fehler << "-error\n";
    }
        
    return 0;
}
PS: Die Fritzbox sendet mir das, wenn jemand anruft:

Code:
23.05.11 10:23:30;RING;0;01511234567;0461XXX8109;SIP4;
 

lenn1

Mitglied
Thread Starter
Mitglied seit
11.10.2005
Beiträge
194
Rätsel ist gelöst. Es fehlte ein endl hinter dem AnruferNummer(buffer)..
 
  • Gefällt mir
Reaktionen: below

lenn1

Mitglied
Thread Starter
Mitglied seit
11.10.2005
Beiträge
194
Es gibt einfach nur "Anruf! \n nr:" aus, da es ja alles ausgibt bis zum ';' nach der Nummer. Da keine Nummer vorhanden ist kommt also nüscht :)
 
Oben