Sockets, InputStream nach OutputStream

  • 2 Antworten
  • Letztes Antwortdatum
T

Tastenmüsli

Neues Mitglied
0
Hallo liebe Gemeinde,

ich habe folgendes Problem:
Ich möchte einen einfachen EchoServer ansprechen. Dies funktioniert auch in reinem Java, doch der Umstieg auf Android bereitet mir ein wenig Probleme.

Ich schicke einen String mittels PrintWriter an den Server. (funktioniert)
Doch ich bekomme die Antwort nicht ausgelesen. Der Socket schließt sich scheinbar schon vorher.
Getrennt von einander funktioniert beides einwandfrei, nur halt nicht wenn sie hintereinander nutze.

Hier einmal nur der Code vom Thread:
Code:
package com.server.test;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;

import android.util.Log;

public class Connection extends Thread {
	
	Socket so;
	PrintWriter pw;
	BufferedReader br;
	
	
	String eingang;
	String ausgang;
	
	public Connection(){
		eingang = "";
		ausgang = "";
		
	}
	
	@Override
	public void run(){
		try {
			so = new Socket("192.168.0.10", 2000);
		} catch (UnknownHostException e) {
			Log.d("Fehler", "UnknownHostException");
		} catch (IOException e) {
			Log.d("Fehler", "IOException");
		}
		
		if(so == null){
			Log.d("Fehler", "keine Verbindung");
		}else{
			Log.d("OK", "Verbindung erfolgreich");
		}
		

		try {
			pw = new PrintWriter(so.getOutputStream(),true);
			pw.write(ausgang);
			pw.close();
		} catch (IOException e) {
			Log.d("Fehler", "PrintWriter IOException");
		}

		
		try {
			br = new BufferedReader(new InputStreamReader(so.getInputStream()));
			Log.d("MSG", br.readLine());
			
		} catch (IOException e) {
			e.printStackTrace();
		}	

		Log.d("Thread", "ENDE");
	}
	
	public void setAusgang(String ausgang){
		this.ausgang = ausgang;
	}
}

Und auch einmal den Log:
Code:
06-05 22:54:49.464: W/System.err(10941): java.net.SocketException: Socket is closed
06-05 22:54:49.464: W/System.err(10941): 	at java.net.PlainSocketImpl.checkNotClosed(PlainSocketImpl.java:134)
06-05 22:54:49.464: W/System.err(10941): 	at java.net.PlainSocketImpl.getInputStream(PlainSocketImpl.java:216)
06-05 22:54:49.464: W/System.err(10941): 	at java.net.Socket.getInputStream(Socket.java:343)
06-05 22:54:49.464: W/System.err(10941): 	at com.server.test.Connection.run(Connection.java:55)
 
Ich muss mal eben ins blaue raten, daher eher fragend formuliert: Ist es nicht so, dass wenn du "pw.close()" aufrufst, alle dazugehörigen "Sachen" mitgeschlossen werden, also auch der Socket?
 
Danke dir vielmals,

Blau war genau die richtige Farbe.
Zudem habe ich noch pw.write() durch pw.println() ersetzt und nun klappt alles wie gewollt.
 

Ähnliche Themen

tarek857
Antworten
4
Aufrufe
416
tarek857
tarek857
Zurück
Oben Unten