Server soll über socket senden
bearbeitet von Jörg ReinholzMoin!
> wenn ich eine Socketverbindung zu meinem Webserver bei Strato aufbaue.
Rückfrage: virtueller eigener Server (Du hast ein eigenes OS ) oder Massenhosting?
Rest neu formatiert:
====================
> Wie kann ich die Verbindung halten und vom Webserver, wenn sich neue Daten ergeben zum Client senden?
> Ist die Verbindungsdauer über ‘strato’-servertimeout definiert?
>
> Also:
> 1. client baut Verbindung auf
> 2. Sever wartet auf Ereignis (bis 1min)
> 3. Server sendet Daten zum Client
>
> Hintergrund:
> Der Server kann keine Verbindung aufbauen, da der Client über UMTS-Stick mit dem Internet verbunden ist und keine eingehende Verbindungen akzeptiert.
> Der Client soll nach Usereingaben am Server, Daten ausdrucken und Bestätigung zum Server senden.
>
> Eine Verbindung zum Server klappt eigentlich soweit, nur Daten bekomme ich ohne "Connection: Close\r\n\r\n"; gar keine und dann auch nur mit einem einfachen echo .statt socket_write !?
>
> Client:
> ~~~
> $service_port = 80;
> /* Die IP-Adresse des Zielrechners ermitteln. */
> $address = gethostbyname('blog.xxx.de'); //
>
> // ****** USER UND PASS für htaccess
> $credentials = base64_encode('user:pass');
> /* Einen TCP/IP-Socket erzeugen. */
> $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
> echo "Versuche, zu '$address' auf Port '$service_port' zu verbinden ...";
> $result = socket_connect($socket, $address, $service_port);
> $in = "GET /data.php HTTP/1.1\nAuthorization: Basic ".$credentials."\r\n";
> $in .= "Host: blog.xxx.de\r\n";
> //$in .= "Connection: Close\r\n\r\n";
> echo "HTTP HEAD request senden ...";
> socket_write($socket, $in, strlen($in));
> echo "OK.\n";
> echo "Serverantwort lesen:\n\n";
> while ($out = socket_read($socket, 2048)) {
> echo $out."<br>\n";
> //sleep(1);
> }
> socket_close($socket);
> ~~~
>
> Server:
> ~~~
> if (($msgsock = socket_accept($sock)) === false) {
> echo "socket_accept() fehlgeschlagen: Grund: " . socket_strerror(socket_last_error($sock)) . "\n";
> break;
> }
> /* Anweisungen senden. */
> $msg = "\nWillkommen auf dem PHP-Testserver. \n" .
> "Um zu beenden, geben Sie 'quit' ein. Um den Server herunterzufahren, geben Sie 'shutdown' ein.\n";
> socket_write($msgsock, $msg, strlen($msg));
> ~~~
Jörg Reinholz