# server.accept() unterbrechen



## joschika77 (10. Mai 2004)

Hallo Leute.

Wie kann man 
	
	
	
	





```
server.accept();
```
 unterbrechen?
Ich drücke aus ein Start Button und dann wartet er auf Clients und bleibt dort so lange drin bis sich jemand 
verbindet.Das Programm hat sich dadurch festgefahren.
Was kann man machen?
Kann mir jemand ein Buch über Netzwerkprogrammierung in Java empfehlen?

MfG Ronn


----------



## stev.glasow (10. Mai 2004)

Du könntest das server.accept(); in einen eigenen Thread packen und dieses dann stoppen wenn er nicht mehr auf eingehende Verbindungen warten soll. Dein Programm wird dann auch nicht mehr blockiert wenn er auf Verbidnugen wartet.


----------



## joschika77 (10. Mai 2004)

Das Problem ist ja das er ständig warten soll.
Ich will ja nur stoppen wenn ich einen anderen Port wählen möchte.
Das funzt aber alles leider nicht.


MfG Ronn


----------



## stev.glasow (10. Mai 2004)

joschika hat gesagt.:
			
		

> Das Problem ist ja das er ständig warten soll.
> Ich will ja nur stoppen wenn ich einen anderen Port wählen möchte.
> Das funzt aber alles leider nicht.
> 
> ...


Ich meinet das so, du öffnest einen neuen Thread in dem der Server z.B. auf Port 1000 auf eingehende Verbidnungen wartet und dem entsprechend handelt. Wenn sich der Port nun wärend dessen ändert, stoppst du diesen Thread und öffest einen neuen in der der Server nun auf port 123 lauscht. Klar was ich meine ?


----------



## joschika77 (10. Mai 2004)

Ich verstehe.
Ich teste es mal.

MfG Ronn


----------



## stev.glasow (10. Mai 2004)

joschika hat gesagt.:
			
		

> Ich verstehe.
> Ich teste es mal.
> 
> MfG Ronn


Ok. Meld dich wenn du noch Probleme damit hast.


----------



## joschika77 (10. Mai 2004)

Ok. Er fährt sich immer fest. Weil er in der server.accept() hängt und wartet.
Also ich kann gar nicht mehr Stop Button drücken weil er steht.
Verbinden kann ich mich mit dem Client aber.
Das funzt. 

```
public void runChat() 
	{
		while(true)
		{
			try 
			{
				clientc = new ClientConnect(server.accept(), vec, portnr);
			}
			catch (IOException e) 
			{
				e.printStackTrace();
			}
			
			vec.addElement(clientc);
			clientc.start();
		}
	}
```

Ich weiß nicht.
MfG Ronn


----------



## stev.glasow (10. Mai 2004)

Hast du schon mal was mit Threads gemacht ? Das löst nämlich dein Problem.


----------



## joschika77 (10. Mai 2004)

Ich probier immer ein wenig rum, aber so richtig noch nicht.

MfG Ronn


----------



## joschika77 (24. Mai 2004)

Er geht aus 
	
	
	
	





```
server.accept();
```
 zwar raus, aber starte ich wieder
schreibt er .

```
java.net.BindException: Address already in use: JVM_Bind
```
Was mache ich falsch?

MfG Ronn


----------



## Stefan1200 (24. Mai 2004)

Naja, du kannst beim ServerSocket mit setSoTimeout() ein Timeout setzen, in dem du dann einfach schaust, ob er noch weiter warten soll, wenn ja, dann gehste wieder in accept rein.

Bezüglich "java.net.BindException: Address already in use: JVM_Bind", denke daran den ServerSocket zu schliessen.


----------

