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

L

lenn1

Aktives Mitglied
Thread Starter
Dabei seit
11.10.2005
Beiträge
193
Reaktionspunkte
2
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;
 
Rätsel ist gelöst. Es fehlte ein endl hinter dem AnruferNummer(buffer)..
 
  • Gefällt mir
Reaktionen: below
was macht das programm bei unterdrückten rufnummern?
 
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 :)
 
Zurück
Oben Unten