# Ende eines Inputstreams ermitteln



## UdjENE (12. Jun 2007)

hallo zusammen,

habe da ien Problem beim Empfangen des Inpustreams vom Server. also ich möchte Daten vom Server empfangen, und in einer Textarea ausgeben. jedoch will ich nach dem Empfang eines gesendeten Strings eine neue Zeile in der textarea erstellen. daher müsste ich wissen wann der gesendete String zu ende ist. readLine kann ich nicht benutzen , weil die gesendeten Strings ohne newLine am Ende gesendet werden. heir ist mal mein ansatz:

```
server = new Socket("localhost", port);
			
			BufferedReader input = new BufferedReader(new InputStreamReader(server.getInputStream()));
			 
			while (!liveThread.isInterrupted())
			{
				DateFormat dateInstance = new SimpleDateFormat ("HH:mm:ss:SSS "); 
				timeStamp = dateInstance.format( new Date() );
				
				char[] buffer =new char[5000];
				int bufferLength = input.read(buffer); 
				
				for(int i=0; i<bufferLength; i++){
					code=input.read();
					char c = (char)code;
					TLog.setText(TLog.getText() + c );
				}
				TLog.setText(TLog.getText() + "\n" + timeStamp + " STRINGENDE\n");
				TLog.setCaretPosition(TLog.getText().length());
				
				
			}
			
			server.close();
			input.close();
```

das problem bei diesem code ist, dass ich erst beim ersten Input die Länge auslesen kann (input.read(buffer)) und beim zweiten Input den Inhalt (input.read()). leider wird am Ende keine -1 oder sowas bie input.read gesendet. 
hat jemand eine Idee wie ich das Ende ermitteln kann? bzw. komm ich mit Datagram-Socket weiter?


----------



## Murray (12. Jun 2007)

Du hast schon mit dem ersten read Daten gelesen (maximal 5000 Byte, vielleicht aber auch weniger); diese ignorierst du dann aber im weiteren Verlauf - so kann das nicht gehen.

Die Länge eines InputStreams ist prinzipiell nicht bekannt. Du musst entweder zu Beginn die Länge übertragen oder eine eindeutige Kennung mitschicken, an der der Empfänger erkennen kann, dass ein Datensatz komplett ist.


----------



## HoaX (12. Jun 2007)

oder einfach nach der übertragen die verbindung beenden. dann weiß auch der empfangende socket dass das ende erreicht ist


----------



## UdjENE (13. Jun 2007)

danke für die antwort. ich hab variante mit der Kennung senden genommen. also der Server sendet folgenden String: *<005>hallo* und angezeigt wird dann *hallo*.


----------

