Bearbeiten: Sorry, versehentlich mit einem Titel für eine andere Frage geschrieben. Fest.Kann nicht aus Socket lesen (hängt)
Hey Jungs,
ich mit PHP bin zu einem lokalen C++ Socket-Server zu halten Zustand zwischen einem Web-App und ein paar Dämonen zu verbinden. Ich kann Daten an den Socket-Server senden, aber nicht von ihm erhalten; Es blockt nur auf socket_read()
und hängt unbegrenzt. Vergesse ich etwas Dummes (wie ein NULL-Zeichen oder eine andere Kombination von Newline-Zeichen)? Die PHP ist unter:
socket_connect($sock, $addr, $port);
socket_write($sock, 'Hello world');
$str = '';
while($resp = socket_read($sock, 1000))
$str .= $resp;
socket_close($sock);
die("Server said: {$str}");
Der entsprechende Teil des Socket-Server ist unter (beachten Sie, dass die <<
und >>
Betreiber überlastet sind):
std::string data;
sock >> data;
sock << data << std::endl;
Wo >>
Anrufe Socket::recv(std::string&)
und >>
Anrufe Socket::send(const std::string&)
.
Dies funktioniert gut aus (zum Beispiel) Telnet, aber PHP will nicht nett spielen. Irgendwelche Gedanken/Vorschläge werden geschätzt.
Welche Socket-Bibliothek verwenden Sie für C++ oder haben Sie eigene (* nix oder Windows) erstellt? Was ist der Fehler? Blockiert es für immer auf Socken >> Daten oder ist etwas mehr passiert? Ich habe schon lange keine PHP-Kommunikation mit einem C++ - Server mehr verwendet, aber sendet Ihr Server eine Terminierung an den Socket, damit PHP nicht mehr lesen kann? Ihre Schleife wird kontinuierlich in PHP gelesen, bis der Server sagt, dass der Socket fertig ist, Informationen zu senden; Es ist kein Echtzeit-Update, das Sie beachten (da es die Daten ausgibt, nachdem sie vollständig gesammelt und in Ihrem var gespeichert wurden). – RageD
Dies könnte nur in Ihrem Code fehlen, aber haben Sie zuerst 'socket_create' $ Socke? – netcoder
Auch ich sehe das nicht in Ihrem Code, aber Sie müssen $ str drucken, wenn Ihre Schleife abgeschlossen ist. – RageD