App Entwicklung Server Monitoring Tool Anfänger Hilfe

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Mac & i Test Abo
  • Dein Code funktioniert schon richtig. Du prüfst letztendlich nur, ob dein NSURLConnection-Objekt existiert.
    Was du machen musst ist das NSURLConnectionDelegate-Protokoll zu implementieren und dann auf didReceiveResponse und didFailWithError zur reagieren.

    Edit: zu lange Zeit gelassen mit dem Schreiben. Vorredner hat schon alles gesagt :)
  • Wenn du prüfen willst ob der Server erreichbar ist dann verbinde dich "einfach" als Client mit ihm und werte die Antwort aus.
    Unter Windows nimmt man dazu z.B. das Programm Telnet, im Prinzip musst du diese Funktionalität nachbauen.
    Wenn du nur prüfen sollst ob eine Webseite auf einem Apache abrufbar ist kannst du eine Anfrage wie ein Browser starten und den Response-Header auswerten.
    Der Statuscode der Antwort des Apachen macht dann eine Aussage darüber, ob die angeforderte Seite existiert oder nicht.
  • Hallo, ich melde mich zurück denn nach langem Weg indem ich einige Dinge selbst lösen konnte, stehe ich wieder einmal vor einem Problem :(
    Es geht darum nun die JSON-Daten auf das iPhone zu schaffen.
    Wir haben einen Server der alles abfragt, jeden Server der überwacht werden soll und die daten jeweils im 10 sekunden takt einmal ausgibt auf einer PHP seite und fürdie in phase 4 folgende grafische auswertung auch in einer SQL datenbank.
    Nun habe ich im moment den einfall einfach die daten so wie sie sind in form eines JSON-Objektes auf der seite zu posten, die seite anzuwählen per quellcode im phone und sämtlichen inhalt in einer variable zu speichern und dann zu decodieren...nur leider habe ich keine idee und auch keinen plan, wie ich das anstellen soll..
    könnt ihr mir wieder einmal ein paar nützliche tipps geben, das wäre sehr hilfreich :D danke schon mal im Voraus.
  • Also ich würde das eher machen, dass du auf dem Überwachungsserver eine Datenbank hast.
    Die wird alle 10 Sekunden aktualisiert mit den Daten der Server.

    mit dem iPhone rufst du nun vom "Oberserver" eine .php-Datei auf, die dir die aktuellsten Daten aus der Datenbank gibt und diese als JSON verpackt...
    Dann kannst du das mit dem JSON-Framework encoden und dann haste die Daten auf dem iPhone.
    Das Aufrufen der php-Datei würde ich mit eine NSURLConnetion machen.
    Gruß

    Robin
  • NUn, das mit der NSURL COnnection habe ich mir angesehen, aber die meisten die das im netz versuchen zu erklären gehen davon aus, nicht daten von PHP aufs iPhone zu bekommen, sondern genau andersrum.
    Ich bekomme es nicht hin es umzusetzen..bräuchte ein wenig hilfe..
    Die daten werden nun in Form eines JSON-Codes hintereinander alle ausgegeben.
    Der Code sieht dann in etwa so aus:
    [{"servername":"www.ersteseite.de","is_on":"1","datetime":"2012-04-13 08:20:07"},{"servername":"172.17.2.87","is_on":"1","datetime":"2012-04-13 08:20:07"},{"servername":"172.17.0.217","is_on":"0","datetime":"2012-04-13 08:20:01"}]
    Ok, erstmal ist der server der abruft und mit den MySQL Daten sowie der JSON ausgabe auf der PHP seite nur intern erreichbar und dadurch wird die app nur auf dem simulator funktionieren, aber das ist am anfang auch legitim, müsste später ja nur die URL zum abrufen ändern.
    Was ich also brauche ist eine Funktion die die Daten von der PHP Seite zieht (Wobei der aufruf der seite zur ausgabe des codes auf der seite führt, ist aber php-seitig schon geregelt), diesen reinen JSON COde der einfach auf der seite steht nimmt, ihn in einer NSDATA datei speichert und letztendlich decodieren und verarbeiten kann..wie ich mit den daraus entstehenden daten dann verfahren kann, weiß ich auch noch nicht.
    Ich muss ja theoretisch dann meine 5 verschiedenen Funktionen (eine für jede Abfrage vorher) zu einer zusammenfassen die immer per if-Abfrage oder ähnlichem guckt, wenn unter "servername" zb. der wert "www.ersteseite.de" und unter "is_on" der wert 1, dann soll das imageview 1 halt grün sein, statt rot wenn der wert 0 ist (imageview-veränderung ist schon fertig).
    Das wäre was ich tuen würde, gibt es bessere wege, könnt ihr mir etwas empfehlenoder anregungen geben, vllt sogar komplett erklären, was ich tun muss, das wäre sehr nett, ich kann mir alleine einfach zu langsam wissen aneignen :|
    Hoffe auf antwort :) und wenn ihr fragen habt, ich bin jederzeit zur antwort bereit.


    EDIT: Ich würde dann aber wahrscheinlich kein extra framework für die Arbeit mit JSON verwenden sondern die seit iOS 5 eigens eingeführte JSON-verarbeitung die ab da standartmäßig bei der iPhone programmierung verwendbar ist, also NSJSONSerialization

    EDIT 2: Wegen einer erweiterung der Serverabfrage (wo später auch noch gravierende änderungen kommen werden) wurde auch die Abfrage vergrößert, es kommen nun diese daten an:
    [{"servername":"www.google.de","is_on":"1","datetime":"2012-04-13
    08:52:48"},{"servername":"172.17.2.87","is_on":"1","datetime":"2012-04-13

    08:52:48"},{"servername":"www.dritteseite.de","is_on":"1","datetime":"2012-04-13

    08:52:47"},{"servername":"172.17.0.217","is_on":"0","datetime":"2012-04-13

    08:52:47"},{"servername":"www.fuenfteseite.de","is_on":"1","datetime":"2012-04-13
    08:52:47"}]
    Google dient nur zu testzwecken erst einmal, dritte und fuenfte seite sind platzhalter für eine extern erreichbare aber private adresse.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von AlexSuo ()

  • da dir ja deine NSURLConnection NSData zurückgibt soweit ich weiß, versuchs mal damit

    Quellcode

    1. + (id)JSONObjectWithData:(NSData *)data options:(NSJSONReadingOptions)opt error:(NSError **)error



    der Code

    Quellcode

    1. NSError *error = nil;
    2. NSArray *jsonArray = [NSJSONSerialization JSONObjectWithData: data options: NSJSONReadingMutableContainers error: &error];


    damit solltest du deine Serverantwort in nem Array haben und dann machst den Array zur DataSource von nem TableView und lässt es anzeigen
    [window close]
  • Nunja..ich hab ja auch das mit der generellen verbindungsaufnahme nicht verstanden, ich muss die daten erstmal vom server kriegen..
    ist es vllt ein fehler den puren JSON code einfach auf ner php-file zu haben?

    BTW: HAb mittlerweile auch shcon die verarbeitung der JSOn daten geschrieben und die cases geschrieben :)
    Beide seiten sind bereit..mir fehlt nur das schicken des JSONs in form von NSData auf das iPhone, das ist alles was soweit fehlt. ich verstehe die anleitungen von apple einfach nicht..
    ich weiß nicht was das ist was du da geschrieben hast, das ist doch die umsetzung, das decodieren, aber wie ich jetzt die daten von der php bekomme weiß ich immernoch nicht..irgendwas mit NSURLConnection und request..soweit ich weiß, aber unverständlich für mcih als anfänger.

    Danke der Antwort, ich werde mich direkt damit befassen :)

    und am ende brauche ich ja keine tableview (berichtige mich wenn ich falsch liege) sondern ich muss die daten da drin benutzen um einfach nur grün auf rot zu setzen..wenn da hinter halt 1 steht hinter dem jeweiligen servername ist es grün das imageview neben dem lable, wenn net isses rot, dann müsste da 0 stehn.
    *verzweifel* es ist so simpel, aber ich checks net :| war das bei euch am anfang auch so?
  • Ok, das WE hatte ich zwar zur hälfte kein netz und zur anderen habe ich mir seit langem auch mal wieder eine auszeit gegönnt, aber ich bin ein wenig voran gekommen, wenn auch nur sehr wenig.
    Mittlerweile ist soweit alels fertig, nur eben das winzig kleine bischen, das eine was mich am meisten beschäftigt..

    JSON-Code liegt so wie er ist auf einer PHP Seite die aktualisiert wird wenn man sie aufruft (was klar ist).
    Brauche den Code, der da einfach nur rein als JSON-Code direkt auf der seite steht, im iPhone als NSData über wahrscheinlich NSURLConnection.
    Dann wandel ich das um mit JSONObjectWithData und erhalte ein NSArray. Daten vom array dazu verweden, images eines von 2 bildern zu zu ordnen..das wars..ich komme jediglich vom verständnis her nicht weiter, arbeite leider auch dauernd unter anderen bedingungen. (manchmal kein netz, manchmal nicht im netzwerk (monitoring server nur im netzwerk erreichar) etc.

    @ Uniique. Dein Code hat mir wirklich sehr weitergeholfen, zumindest hat das mein verständniss erhöht. Ich weiß jediglich nicht so richtig, wie ich das wirklich verstehen soll. Kannst du den Code bitte mal lesen? (also in eigenen worten wiedergeben) das wäre wirklich sehr sehr hilfreich. Am ende muss ich, soltle ich das verstehen also nur noch mit den daten im array arbeiten um meine Bilder zu ändern.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von AlexSuo ()

  • Ich versuche mich im moment schonmal an der verarbeitung der Daten die am Ende in dem Array vorliegen ,mache dazu einige kleine Tutorials und baue auch Dinge nach, leider funktionieren diese bei mir nicht, was ich auch versuche...vllt liegts am ARC? Das gibt mir die meisten fehler (die einzigen)
    Hier ist das Beispiel dieser Seite: techotopia.com/index.php/Creat…ne_Table_View_Application :

    Quellcode

    1. -(void) viewDidLoad {
    2. [super viewDidLoad];
    3. self.colorNames = [[NSArray alloc]
    4. initWithObjects: @"Red",@"Green",@"Blue",@"Yellow",@"Violet",nil];
    5. }
    6. -(NSInteger) tableView:(UITableView *) tableView numberOfRowsInSection:(NSInteger)section
    7. {
    8. return [self.colorNames count];
    9. }
    10. -(UITableViewCell *) tableView:(UITableView *) tableView cellForRowAtIndexPath:(NSIndexPath *) indexPath
    11. {
    12. static NSString *Cellidentifier = @"Cell";
    13. UITableViewCell *cell =[tableView dequeueReusableCellWithIdentifier:Cellidentifier];
    14. if(cell == nil)
    15. {
    16. cell = [[UITableViewCell alloc]
    17. initWithStyle: UITableViewCellStyleDefault
    18. reuseIdentifier:Cellidentifier];
    19. }
    20. cell.textLabel.text = [self.colorNames objectAtIndex:[indexPath row]];
    21. return cell;
    Alles anzeigen





    Im Unload ist es bereits vorhanden, alles, ebenso implementierungen sind vorgenommen, dennoch zeigt der simulator ein leeres tableview...
    Ist btw von hand abgeschrieben, also kann rechtschreibfehler enthalten.

    Übrigens, ich hab soweit die meisten der Befehle nachschlagen können und mich ein wenig dazu belesen, wenn auch nur halb verstanden in der kurzen Zeit..
    Nur einen nicht, für was ist denn dequeueReusableCellWithIdentifier?
  • sofern er keine Sections hat brauch er diese Methode gar nicht

    dequeueReusableCellWithIdentifier bedeutet,
    er verwendet Zellen wieder die den Reuse Identifier mit dem angegebenen Namen haben, das spart Speicher, sonst müsste immer eine neue Zelle erzeugt werden für jede Reihe im TableView. Zellen die gerade nicht auf dem Bildschirm dargestellt werden, werden dadurch wiederbenutzt
    [window close]
  • die gibt dir zurück wieviele Sections die Tabelle haben soll. Für jede Section wird dann eben die

    -(NSInteger) tableView:(UITableView *) tableView numberOfRowsInSection:(NSInteger)section

    aufgerufen, die du ja auch implementiert hast. Dort gibst du dann deine Anzahl an Zeilen zurück, was auch korrekt ist.
    Wenn die oben genannte Methode nicht implementiert ist, geht die Tabelle davon aus das keine Section vorhanden ist. Daraus folgt dann das nichts angezeigt werden muss.

    Der Aufruf ist im Prinzip:
    - (NSInteger)numberOfSections // nur wenn hier mindestens 1 zurückgegeben wird, wird überhaupt nur nachfolgende Mehtoden aufgerufen
    - (NSInteger) tableView:(UITableView *) tableView numberOfRowsInSection:(NSInteger)section // nur wenn hier mindestens 1 zurückgegeben wird, wird überhaupt nur nachfolgende Mehtoden aufgerufen
    - (UITableViewCell *) tableView:(UITableView *) tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath // ok beides war erfüllt, also zeichne meine Zelle
  • Das heißt also ich benötige sie nicht? so wie scraffy das da beschrieben hat müsste ich sie doch aber brauchen. Wenn nur wenn ich eine mindestanzahl an Sections angebe auch die Zellen gezeichnet werden?
    Oder ich verwirre mich nur wieder selbst ein wenig. Ich hab das ganze ein wenig umgeschrieben, hat aber immernoch nicht funktioniert..bin jetzt wieder auf dem alten stand.

    PS:
    Danke für die Erläuterung :D Aber ich dachte alles was Speicher angeht wird vom ARC verwaltet