ralphi: Server soll über socket senden

Beitrag lesen

Hi Leute,

wenn ich eine Socketverbindung zu meinem Webserver bei Strato aufbaue. 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));
--
Viele Grüße aus LA ralphi