Ik heb een java server draaien, die socket verbindingen accepteerd. Ik handel ze af met de nieuwe NIO packages (select()).
Tevens draai ik een php webinterface die m.b.v. fsockopen() een verbinding maakt met deze javaserver, en commando's uitvoert, en het resultaat uitleest.
Beiden draaien op linux, java versie JDK 1.4.2, PHP 4.0.6;
Als ik met telnet verbinding maak, werkt het zoals het hoort:
Ik stuur hier m.b.v. telnet de commando's "uptime", "test" en "help".
Als ik m.b.v. php een verbinding maak, en een commando zend mbv
en vervolgens het resultaat uit probeer te lezen met
dan hangt php op de fgets, aangezien feof nooit optreed.
Ik houd de verbinding server-side open aangezien een client meerdere commando's in een sessie moet kunnen uitvoeren. Het lijkt er echter op dat php dan geen EOF ziet (alhoewel de buffer wel leeg is), en dus vrolijk in de while-loop hangt.
Wat is een nette manier om dit op te lossen? Kan ik keihard een EOF char zenden vanuit mijn java server?
Ik heb een niet erg nette oplossing in de vorm van een commando dat ervoor zorgt dat iedere reactie wordt afgesloten met "/eod" (end-of-data), zodat ik in php hierop kan controleren. Aangezien er mogelijk ook andere soorten clients gebruik van gaan maken wil ik deze oplossing eigenlijk vermijden, en een oplossing hebben die wel met EOF werkt.
Tevens draai ik een php webinterface die m.b.v. fsockopen() een verbinding maakt met deze javaserver, en commando's uitvoert, en het resultaat uitleest.
Beiden draaien op linux, java versie JDK 1.4.2, PHP 4.0.6;
Als ik met telnet verbinding maak, werkt het zoals het hoort:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. uptime Ongeldig commando: [uptime] test Ongeldig commando: [test] help Available commands: load [object] [id] Load an object unload [object] [id] Unload an object exit | quit Close this connection shutdown Shutdown the Mgt server |
Ik stuur hier m.b.v. telnet de commando's "uptime", "test" en "help".
Als ik m.b.v. php een verbinding maak, en een commando zend mbv
PHP:
1
| fputs($handle, $commando."\n"); |
en vervolgens het resultaat uit probeer te lezen met
PHP:
1
2
3
| while(!feof($handle)) { $data = fgets($handle, 250); } |
dan hangt php op de fgets, aangezien feof nooit optreed.
Ik houd de verbinding server-side open aangezien een client meerdere commando's in een sessie moet kunnen uitvoeren. Het lijkt er echter op dat php dan geen EOF ziet (alhoewel de buffer wel leeg is), en dus vrolijk in de while-loop hangt.
Wat is een nette manier om dit op te lossen? Kan ik keihard een EOF char zenden vanuit mijn java server?
Ik heb een niet erg nette oplossing in de vorm van een commando dat ervoor zorgt dat iedere reactie wordt afgesloten met "/eod" (end-of-data), zodat ik in php hierop kan controleren. Aangezien er mogelijk ook andere soorten clients gebruik van gaan maken wil ik deze oplossing eigenlijk vermijden, en een oplossing hebben die wel met EOF werkt.