Server soll über socket senden
ralphi
- php
- webserver
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:
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));
Moin!
wenn ich eine Socketverbindung zu meinem Webserver bei Strato aufbaue.
Rückfrage: virtueller eigener Server (Du hast ein eigenes OS ) oder Massenhosting?
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:
- client baut Verbindung auf
- Sever wartet auf Ereignis (bis 1min)
- 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
Hi Jörg,
Rückfrage: virtueller eigener Server (Du hast ein eigenes OS ) oder Massenhosting?
Massenhosting :-
Rest neu formatiert:
danke wie hast du den Code gepackt? Ich seh nur einen Button </>
Hallo,
wie hast du den Code gepackt? Ich seh nur einen Button </>
Der Button ist schon richtig, aber siehe auch den Hinweistext oben auf der Seite: die Leerzeilen sind wichtig. Auch für die Auflistung.
Gruß
Kalk
Hallo und guten Morgen,
Rückfrage: virtueller eigener Server (Du hast ein eigenes OS ) oder Massenhosting?
Massenhosting :-
Ich habe hier eben "Kassenhosting" (= "Massenpatient") gelesen ;-P
Würde ja auch passen...
Vielleicht interessieren dich die Klasse und die Beispiele, die Google dafür bereit hält?
Based on PHP WebSocket Server 0.2
- http://code.google.com/p/php-websocket-server/
- http://code.google.com/p/php-websocket-server/wiki/Scripting
WebSocket Protocol 07
- http://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-07
- Supported by Firefox 6 (30/08/2011)
Ich habe schon damit herumgespielt und es funktioniert auch mobil.
Grüße
TS