# Socketverbindung zwischen PHP und Java?



## 0001001 (8. Apr 2007)

Hallo Ihr,

ist es möglich in einer Javaanwendung einen Serversocket anzulegen und sich dann mit einem PHP Skript damit zu verbinden? Oder sind PHP Sockets und Javasockets nicht zueinander kompatibel?


----------



## JAVAn00b (8. Apr 2007)

was willst du denn machen?


----------



## 0001001 (8. Apr 2007)

Mit einem PHP Skript eine Verbindung zu einen Java Serversocket herstellen und darüber dann Daten austauschen. Es muss PHP sein, da JSP auf Grund eines fehlenden Servlet Containers nicht möglich ist.


----------



## 0001001 (9. Apr 2007)

ARGH! Die Verbindung vom PHP Client zum Java Server klappt und das Senden von Nachrichten zum Server auch. *Aber das Empfangen von Nachrichten klappt nicht. *
Der Fehler muss irgendwo beim OutputStream liegen (Streams in Java sind nicht gerade meine Stärke). 
Hier mein Code:

PHP Client:

```
<?php
$host="localhost";
$port=6000;
$timeout=5;
?>

<html>
<head>
<title>Demo</title>
</head>
<body>
<?php 
// Falls Formular abgesendet....
if ($sent == 1){
	$sk=fsockopen($host,$port,$errnum,$errstr,$timeout) ;
	if (!is_resource($sk)) {
		exit("connection fail: ".$errnum." ".$errstr) ;
	} 
	// Eingegebenen Text senden....
	fwrite($sk,$text);
	$dati="" ;
	// Antwort empfangen
	while (!feof($sk)) {
		$dati = fgets ($sk, 1024);
	}
	echo "".$dati;
}
?>
<form name="form1" method="get" action="<?php echo $PHP_SELF; ?>">
<input name="sent" type="hidden" value="1">
Text eingeben:
<input name="text" type="text" size="20">
<input type="submit" name="Submit" value="Abschicken">
</form>
</body>
</html>
```

Java Server:

```
import java.net.*;
import java.io.*;

public class Server {
	public static void main(String[] argv){
		ServerSocket anschluss= null;
		try {
			anschluss = new ServerSocket(6000);  
		}
		catch (IOException e){
			System.out.println(e);
		}	    
	    while(true){
	    	try {
		    	Socket client = anschluss.accept();
		    	InputStreamReader portLeser =  new InputStreamReader(client.getInputStream());
		    	BufferedReader eingabe = new BufferedReader(portLeser);
		    	PrintWriter out = new PrintWriter(new OutputStreamWriter(client.getOutputStream()));
		    	String text = eingabe.readLine();
		    	// Input ausgeben
		    	System.out.println(text);
		    	// Echo Input (Input zurueckgeben)
		    	out.println(text);		    	
		    	out.flush();
		    	out.close();
	    	}
	    	catch (IOException e){
	    		System.out.println(e);
	    	}
	    }
	}		
}
```

Kann mir bitte jemand nen Tip geben, ich tüftle hier schon Stunden rum... :-(


----------



## Wildcard (9. Apr 2007)

Die Kombination als solche liegt mir völlig fremd und ich habe auch nicht vor jemals etwas ähnliches zu versuchen, von daher kann ich mich hier wahrlich nicht als Experten betrachten:
Wenn du mit PHP auf diese Weise kommunizieren willst, solltest du eventuell statt Java Strings lieber bytes mit explizitem Encoding versenden, alles andere erscheint mir ... unnatürlich und ist eine potentielle Fehlerquelle.


----------



## 0001001 (10. Apr 2007)

Fehler gefunden. Beim Senden der Nachricht vom PHP Skript muss am Ende eine Lehrzeile gesendet werden.

```
fwrite($sk,$text."\n");
```


----------



## André B. (10. Apr 2007)

Ich glaube auch dir sagen zu können warum das so ist. Du benutzt auf der Javaseite zum lesen einen BufferedReader und holst dir den Text von PHP mit readLine(). Deshalb bleibt das Javaprogramm stehen, bis eine komplette Zeile von PHP gesendet wurden. 
Mfg André


----------

