Ankündigung

Einklappen
Keine Ankündigung bisher.

Sockets bei php/Interaktion mit Java

Einklappen

Unconfigured Ad Widget

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Sockets bei php/Interaktion mit Java

    Hallo liebes Forum und liebe Mitglieder,

    glaich vorweg: Ich habe dasselbe Problem schon bei chip.de beschrieben, dort wurde ich allerdings auf ein größeres php-Forum verwiesen, weil man mir leider nicht weiterhelfen konnte.(http://forum.chip.de/php-mysql-etc/s...a-1432856.html)

    Nun zu meinen Problemen:
    Ich versuche, einen NCID-Server abzufragen(läuft auf meinem Router). Ich habe mit Java ein Programm geschrieben, das wunderbar die Daten abfrägt und auch per "System.out" ausgibt.
    Da das alles auf einem Server laufen und in Datenbanken gespeichert werden soll, wollte ich die Daten an ein php-Script übergeben. Mein erstes Problem war, wie man die Daten übergibt. Ich habe bis jetzt nur die Möglichkeit gefunden, vom Java-Programm per loopback auf "localhost" ein Script aufzurufen und die Daten mit dem Query-Teil der URL zu übergeben. Allerdings würde dabei meines Wissens der gesamte Vorgang über die Netzwerkkarte verkehren, was nicht wirklich Zeit/Ressourcen sparend wäre. Auch könnte man dabei sehr leicht die Daten manipulieren.
    Gegooglet gab ich schon nach "Interaktion Java php" und weiteren Kombinationen. Es kann natürlich sein, dass ich mich zu dumm angestellt habe und einfach nicht das passende Stichwort verwendet habe, dann tut es mir Leid, dass ich euch bemühen musste, aber mir ist nichts weiteres mehr eingefallen.
    Ich habe dann versucht, die Port-Abfrage über php zu realisieren. Bei Java wird das sehr leicht über die Klasse "Sockets" erledigt, bei der man nur IP-Adresse, Port-Nummer eingeben muss und dann gleich den InputStream abhören kann.
    Bei php gibt es auch die "socket_"-Funktionen. Allerdings bin ich damit leider nicht wirklich klar gekommen. Ich habe mir bei php.net die Rubrik durchgelesen, bin dabei auch auf folgendes Beispiel gestoßen: http://de2.php.net/manual/de/sockets.examples.php
    Ich habe es übernommen(natürlich IP-Adresse geändert) und ausgetestet. Sowohl bei 127.0.0.1, als auch bei der Router-IP wird die Seite nie fertig geladen. Es stand immer nur "Warten auf localhost..." da(Localhost deswegen, weil ich es über XAMPP auf meinem Rechner getestet habe).
    Fehlermeldungen werden leider keine produziert. Beim kam folgende Fehlermeldung:

    "Warning: socket_bind() [function.socket-bind]: unable to bind address [0]: Die angeforderte Adresse ist in diesem Kontext ungültig. [...] on line 19"

    Folgendes Script habe ich selber geschrieben und auch ausprobiert:
    PHP-Code:
    <?php
    error_reporting
    (E_ALL);
    $server socket_create(AF_INET,SOCK_RAW,SOL_UDP);
    socket_connect($server,"/*IP-Adresse*/",/*Post*/);
    socket_listen($server,5);
    socket_accept($server);
    echo 
    socket_read($server,90);
    ?>
    Auch hier wird das Laden der Seite nicht beendet, also selber Fehler, wie oben!

    Ich lasse auch gleichzeitig mittels WireShark den Port prüfen. Bei der Java-Version werden Pakete verschickt. Bei php überhaupt nicht.

    Ich würde auch nur wenn es gar nicht anders möglich wäre, das Programm mit Perl/CGI zu schreiben, da ich mich in den beiden Programmiersprachen erst zurecht finden müsste. Als letzte Möglichkeit bliebe dies allerdings offen!

    Zusammengefasst:
    Gibt es bei meinem Ansatz einen Denkfehler oder sind die "socket"-Funktionen noch nicht ausgereift, was auch für die undokumentierte Funktion "socket_recv" sprechen würde?
    Oder:
    Gibt es eine elegantere Lösung als loopback, mittels Java ein php-Script aufzurufen?

    Und zu guter Letzt:
    XAMPP 1.7.3
    PHP 5.3.1
    error_reporting(E_ALL) in beiden Funktionen
    Rechtschreibfehler sind auszuschließen(IP-Adressen und Portnummern mehrmals kontrolliert, Rechtschreibfehler bei Funktionen würden Parse_Errors ergeben)

    Vielen Dank schon einmal für die Mühe und natürlich die Antworten!

    Liebe Grüße und einen schönen Abend noch

    BioLauri
    Viele Grüße,

    BioLauri


  • #2
    http://de2.php.net/manual/de/sockets.examples.php

    Welches Beispiel hast du denn benutzt? Vermutlich Beispiel #1 Socket-Beispiel: Einfacher TCP/IP-Server, da du ja mit serverspezifischen Socketfunktionen (socket_bind(), socket_listen() und socket_accept()) hantierst.

    Du möchtest aber einen Server abfragen und nicht selbst einen erstellen, also benötigst du "Beispiel #2 Socket-Beispiel: Einfacher TCP/IP-Client".

    Prinzipiell müsstest du folgende Funktionen aufrufen:

    // Socket erzeugen
    socket_create()
    // Zu deinem Server verbinden
    socket_connect()

    // Je nach Protokoll-Spezifikation Lesen und Schreiben
    // (NCID sagt mir nichts, aber das hast du ja schon in Java implementiert)
    socket_write()
    socket_read()

    Kommentar


    • #3
      Hallo,

      wer lesen kann ist klar im Vorteil
      Danke für deine Hilfe.
      NCID(Network Caller ID) ist eine Möglichkeit, die Anruferliste bei Routern/Servern abzufragen. So dass man z.B am PC eine Benachrichtigung bekommt, wer gerade anruft.
      Okay, danke. Ich habe das zweite Beispiel etwas umgeändert, sodass ich bei WireShark Netzwerkverkehr sehe. Ich muss jetzt nur noch die Daten auswerten und verarbeiten. Dazu habe ich allerdings grad keine Zeit. Ich melde mich heute Abend noch einmal, wenn ich es probiert habe.
      Vielen Dank noch einmal für deine Hilfe

      Liebe Grüße,

      BioLauri
      Viele Grüße,

      BioLauri

      Kommentar


      • #4
        Hallo,

        erstmal ein Sorry für die späte Antwort.
        Ich habe es ausprobiert. Es funktioniert super! Vielen Dank!

        Einen schönen Abend noch und liebe Grüße,

        BioLauri
        Viele Grüße,

        BioLauri

        Kommentar

        Lädt...
        X