Sockets

thatIsAFeature

Grünschnabel
Hallo
in einer Methode mache ich einen ServerSocket auf.
Die Zeit, die er auf eine Antwort warten soll, soll nicht definiert werden.
Allerdings möchte ich die dem Benutzer die Möglichkeit geben den Server wieder zu schliessen, auch wenn der noch in der serverSocket.accept() Methode hängt.
Wenn ich serverSocket.close() sage schmeißt er eine Exception.
Der Code dazu sieht so aus;
Code:
 new Thread( new Runnable() 
		    { 
		      public void run() 
		      { 
		    	  
				try {
					serverSocket = new ServerSocket( port );
					Socket client = serverSocket.accept();
					controller.gui.haveAConnection();
					connected = true;
					oIS = new ObjectInputStream(client.getInputStream());
					oOS = new ObjectOutputStream(client.getOutputStream());
					
					System.err.println("nach accept!!");
					InputStream  in  = (InputStream) client.getInputStream(); 
				    OutputStream out = (OutputStream) client.getOutputStream(); 
				
				    
				
				
				} catch (IOException e) {
					
					e.printStackTrace();
				}
				
		      } 
		    } ).start();
oder kann ich den anonymen Thread irgendwie abschiessen
Dazu müsste das aber so ähnlich aussehen.:
Code:
Thread t = new Thread( new Runnable() 
		    { 
		      public void run()
Da bekomme ich aber den Felher: cann-ät convert from void to Thread.
Anscheinend gibt new Thread() void zurück
 

Andibert

Mitglied
dein Ansatz war schon fast richtig.
Java:
Thread t = new Thread( new Runnable() 
		    { 
		      public void run(){
...
}});
t.start;
so sollte es funktionieren.
du kannst start natürlich nicht in der selben zeile wie die Zuweisung zu t machen, da start() eine void methode ist.
Daher erst t zuweisen und dann start() an t aufrufen. Später kannst du dann stop() an t aufrufen.