# java.net.SocketException: Software caused connection abort



## HarrySMorgan (20. Dez 2004)

Hallo, 

ich habe ein Programm auf der Basis von TCP Sockets geschrieben, das mit einem Tomcat 4.1.29 kommuniziert. Ich verwende JDK 1.4.2_06. 

Beim Programmstart erzeuge ich einen Socket. Die Verbindung zum Tomcat ist erfolgreich und ich kann auch Befehle an den Tomcat schicken und Antworten empfangen. 

In sehr unregelmäßigen Abständen bekomme ich jedoch folgende Exception: 

java.net.SocketException: Software caused connection abort: recv failed 
at java.net.SocketInputStream.socketRead0(Native Method) 
at java.net.SocketInputStream.read(SocketInputStream.java:129) 
at sun.nio.cs.StreamDecoder$CharsetSD.readBytes(StreamDecoder.java:408) 
at sun.nio.cs.StreamDecoder$CharsetSD.implRead(StreamDecoder.java:450) 
at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:182) 
at java.io.InputStreamReader.read(InputStreamReader.java:167) 
at java.io.BufferedReader.fill(BufferedReader.java:136) 
at java.io.BufferedReader.readLine(BufferedReader.java:299) 
at java.io.BufferedReader.readLine(BufferedReader.java:362) 

Kann mir jemand sagen, wie ich das Auftreten dieser Exception vermeiden kann bzw. was sie bedeutet? 

Grüße 
Harry


----------



## meez (21. Dez 2004)

Wahrscheinlich, weil der Tomcat als Webserver eine Connection nicht automatisch hält und nach einer bestimmten Zeit wieder abbricht.
Wenn du HTTP richtig implementierst, kannst du das Steuern...


----------



## Bleiglanz (21. Dez 2004)

die Frage ist, wo im Tomcat
ein ServerSocket erzeugt wird

Request?
Session?
ServletContext?

an und für sich immer Problematisch, im (Web)-Container einen Thread aufzumachen...


----------



## HarrySMorgan (22. Dez 2004)

meez hat gesagt.:
			
		

> Wahrscheinlich, weil der Tomcat als Webserver eine Connection nicht automatisch hält und nach einer bestimmten Zeit wieder abbricht.
> Wenn du HTTP richtig implementierst, kannst du das Steuern...



Ich habe einen Tomcat-Server und muss die client-seitige Applikation, die auf JSPs und Applets basiert, durch eine eigene Client-Applikation ersetzen.

Beim Mitschneiden des Netzwerkverkehrs zwischen Server und Client mit Ethereal habe ich festgestellt, dass die gesamte Kommunikation über einen einzigen Socket funktioniert. Also bricht der Tomcat nicht zwangsläufig die Verbindung ab.

Bei meinem eigenen Client bricht die Kommunikation aber immer recht bald ab. Meine Kommunikation mit dem Tomcat basiert auf TCP Sockets, wobei ich den Tomcat bitte, die Verbinung offen zu lassen ("Connection: Keep-Alive"). Warum schließt er dann trotzdem die Verbindung? Was kann ich tun, damit die Verbindung offen bleibt?

Harry


----------



## meez (22. Dez 2004)

Da hab ich was falsch verstanden...
Ich dachte, dass du eine Standalone Applikation hast, und von dieser aus mit einem Tomcat kommunizierst...


----------

