Wie connection Reset abfragen/abfangen?

Status
Nicht offen für weitere Antworten.

TobiTobsen

Aktives Mitglied
Hi,
in meiner Software baue ich eine Socket verbindung zu einem Server auf.
Läuft alles über statische IP´s in einem lokalen Netzwerk.

Das läuft soweit alles ganz gut, allerdings wird tauch nach einer gewissen Zeit in der nichts gesendet wird eine Conection Reset Exceptionn (java.net.SocketException: Connection reset) auf sobald wieder etwas gesendet wird.

Es ist so das ich Daten sende und dann den gegenüber noch mal abfrage ob er den neuen Befehl übernommen hat.
Also erst neue Daten senden, dann abfragen. Und nur beim abfragen taucht diese Exception auf, nicht beim schreiben...

Kann mir jemand sagen wie ich die abfragen kann ob die Verbindung noch besteht oder ein reset ausgeführt wurde? Mit socket.isconnected() klappt es leider nicht.


Viele Grüße,
Tobi
 

Kaffeebohn

Bekanntes Mitglied
Wieviel Zeit liegt denn zwischen dem senden und dem abfragen? Schließt du evtl. einen Stream wodurch die Verbindung beendet wird?
 

TobiTobsen

Aktives Mitglied
Hier mal etwas aus meiner Klasse in der die Socketverbindung aufgebaut wird

[Java]
/**
* Konstuktor
*/
public EthernetIO (String ipAdress, int portNumber){
logger = Logger.getLogger(EthernetIO.class);
this.ipAdress = ipAdress;
this.portNumber = portNumber;

pos = new PipedOutputStream();
openSocket();

try {
socket.setKeepAlive(true);
} catch (SocketException e1) {

e1.printStackTrace();
}

}



/**
* Stellt Socketverbindung her.
*/
public void openSocket(){

try {
System.out.println(ipAdress + " " + portNumber);
socket = new Socket (ipAdress, portNumber);
System.out.println("Socket connected?: " + socket.isConnected());
} catch (UnknownHostException exc) {
logger.warn(exc.getMessage());
exc.printStackTrace();
}
catch (IOException e) {
logger.warn(e.getMessage());
e.printStackTrace();
}


try {
outStream = socket.getOutputStream();
inStream = socket.getInputStream();

} catch (IOException e1) {
logger.warn(e1.getMessage());
e1.printStackTrace();

}
}



/**
* Schließt die Socketverbindung
*/
public void closePorts (){
try {
outStream.close();
inStream.close();
socket.close();
System.out.println("Socket Closed");
} catch (IOException e) {
logger.error(e.getMessage());
e.printStackTrace();

}
}


[/Java]


Nach einer gewissen Zeit in der die Kommunikation ruht, fliegen mir die Exceptions nur so um die Ohren. Meistens Connection Reset...
Fiese Sache.

Vielen Dank schon mal im Vorraus!


edit:

StackTrace:

[Java]
java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(Unknown Source)
at java.net.SocketInputStream.read(Unknown Source)
at mdc.controller.EthernetIO.readSingleByte(EthernetIO.java:301)
at mdc.controller.barco.test.main(test.java:56)
[/Java]
 
Zuletzt bearbeitet:
T

tuxedo

Gast
Sieht soweit ganz okay aus. Bis auf den setKeepAlive() Aufruf würd' ich's genauso machen.

Ein paar Fragen hab ich aber noch:

* Was für ein Server ist das? Hast du den Code-technisch selbst unter Kontrolle?
* Wielange liegt die Verbindung brach bevor der ConnectionReset auftritt? Ist die Zeit immer gleich oder variiert diese?

Generell: Abfragen, ob die Verbindung noch steht oder "funktioniert" kannst du nicht ohne etwas Eigenaufwand. Der Link hier hat mir vor einiger Zeit geholfen: socket : Java Glossary

Mein Fazit: Ich schicke, wenn die Verbindung in einen Idle-Zustand gerät in einem bestimmten Interval eine "Ping" Nachricht an mein Gegenüber, welcher innerhalb einer bestimmten Zeit mit "Pong" antworten muss. Kommt die Antwort nicht, bzw. spät, dann kann ich davon ausgehen dass die Verbindung gestört ist, bzw. nicht mehr existiert.

Gruß
Alex

P.S. Für was steht denn das "barco" in dem Packagenamen? Nicht zufällig für eine Firma mit Stammsitz in Belgien?
 

TobiTobsen

Aktives Mitglied
Hi Alex,
danke für deine Infos.

Warum würdest du den setKeepalive nicht machen?
Ich dachte immer das ich dadurch verhindere das mein gegenüber die Verbindung nach seinem Timeout kappt.

- der Server gegenüber hab ich nicht unter Kontrolle. Er macht das was er für richtig hält :-(.
- Die Zeit konnte ich bisher noch nicht wirklich herausfinden. Der Fehler tritt gefühlt erst nach 2-3h Stunden auf.

Den Link werde ich mir mal anschauen,danke.

Ja hat was mit der belgischen Firma zu tun :).

Grüße
 
T

tuxedo

Gast
Hi Alex,
danke für deine Infos.

Warum würdest du den setKeepalive nicht machen?

Naja, du hast keinen Einfluss darauf wann ein KeepAlive gesendet wird. Wirklich "brauchen" konnte ich die Einstellung deshalb bis jetzt noch nicht. Mein eigenes PingPong ist da etwas transparenter.

Ich dachte immer das ich dadurch verhindere das mein gegenüber die Verbindung nach seinem Timeout kappt.

Schau mal in den Link. Da sollte das beschrieben stehen.

- der Server gegenüber hab ich nicht unter Kontrolle. Er macht das was er für richtig hält :-(.
- Die Zeit konnte ich bisher noch nicht wirklich herausfinden. Der Fehler tritt gefühlt erst nach 2-3h Stunden auf.

Den Link werde ich mir mal anschauen,danke.

Tritt der Fehler wirklich nach 2-3h "idle" auf, oder auch "einfach mal so kurz nachdem etwas gesendet wurde"?
Im ersten Fall würde ich drauf tippen, dass der Server timeout-technisch die Verbindung kappt. Könnte sein, dass der "einseitige Keep alive" den Server nicht wirklich interessiert.
Kannst du denn "dummy anfragen" schicken um die Verbindung nicht zu lang im "idle" Zustand zu lassen?

Ja hat was mit der belgischen Firma zu tun :).

Na dann sind wir Kollegen: WhoIsWho -> achr ;)

Gruß
Alex
 

TobiTobsen

Aktives Mitglied
Ja Fehler tritt wirklich nur nach ein paar Stunden auf...
Ich werde das mit den Dummy-Messages noch mal testen.

Also ich bin nicht von Barco, arbeite nur mit deren Produkten.
und du bist von Barco?
 
T

tuxedo

Gast
> Ja Fehler tritt wirklich nur nach ein paar Stunden auf...
> Ich werde das mit den Dummy-Messages noch mal testen.

Denke das sollte helfen.
Was mir dazu noch eingefallen ist: MySQL JDBC: Da hat man in der Standardkonfiguration ein ähnliches Problem: Baut man eine Verbindung zur DB auf und benutzt diese lange Zeit nicht, fliegt einem alles um die Ohren wenn man sich nach Stunden doch wieder dafür entscheidet eine Abfrage zu schicken.
Da hilft dann auch nur JDBC/MySQL so einzustellen dass die Verbindung nicht gekappt wird, ODER regelmäßiger Anfragen zu stellen, damit die Verbindung gar nicht erst "herum idle't".

> Also ich bin nicht von Barco, arbeite nur mit deren Produkten.

Ah, okay. So rum geht's natürlich auch :)

> und du bist von Barco?

So ist es.
 
T

tuxedo

Gast
Zu KeepAlive auf Socketebene in Java:

Java 2 Platform SE v1.3.1: Interface SocketOptions

When the keepalive option is set for a TCP socket and no data has been exchanged across the socket in either direction for 2 hours (NOTE: the actual value is implementation dependent), TCP automatically sends a keepalive probe to the peer. This probe is a TCP segment to which the peer must respond. One of three responses is expected:
1. The peer responds with the expected ACK. The application is not notified (since everything is OK). TCP will send another probe following another 2 hours of inactivity.
2. The peer responds with an RST, which tells the local TCP that the peer host has crashed and rebooted. The socket is closed.
3. There is no response from the peer. The socket is closed. The purpose of this option is to detect if the peer host crashes. Valid only for TCP socket: SocketImpl

Bei dir scheint Fall 2 einzutreten. Und offenbar lässt der Server die Verbindung fallen BEVOR dein Client ein KeepAlive sendet.
Um eine Art PingPong (bzw. eine Dummy-Anfrage an den Server) wirst du nicht herum kommen wenn die Verbindung dauerhaft "online" bleiben soll.


- Alex
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
x46 Connection reset by peer: socket write error Netzwerkprogrammierung 6
F Probleme mit Connection Reset bei Telnet Verbindung Netzwerkprogrammierung 1
R Socket InputStream readObject > Connection Reset Netzwerkprogrammierung 3
D Socket Socket absichtlich so schließen, dass Gegenseite java.net.SocketException: Connection reset wirft Netzwerkprogrammierung 4
K Socket Exception Connection reset Netzwerkprogrammierung 9
VfL_Freak Socket SocketException: Connection reset Netzwerkprogrammierung 11
Z Socket Connection reset by peer nur per IP nicht über localhost Netzwerkprogrammierung 13
G Exception: Connection reset by peer: socket write error Netzwerkprogrammierung 2
D Client Server Problem, Methode readline() löst SocketException "Connection reset" aus Netzwerkprogrammierung 8
sparrow Connection Reset bei Webserver, Java WebStart als Client Netzwerkprogrammierung 9
IT-MaD Connection reset by peer: socket write error Netzwerkprogrammierung 2
B Multithreaded Server: Connection reset Netzwerkprogrammierung 4
T JDBC Verbindungsabbruch (Connection reset) Netzwerkprogrammierung 2
M SocketException: Connection reset Netzwerkprogrammierung 10
M seltsam: java.net.SocketException: Connection reset Netzwerkprogrammierung 1
Thalion TCP Connection zu langsam Netzwerkprogrammierung 2
S Client Server Connection Netzwerkprogrammierung 4
C Handle Connection Problem Netzwerkprogrammierung 3
L ssh connection; Zugriff auf 'screen' Prozess Netzwerkprogrammierung 5
C Client connection per Portforwarding auf einen lokalen Serverport Netzwerkprogrammierung 3
M Connection refused? Netzwerkprogrammierung 2
D Connection refused Netzwerkprogrammierung 3
B Client/Server Connection Problem Netzwerkprogrammierung 2
C Socket Connection refused bei Internetverbindung - Welcher Port? Netzwerkprogrammierung 5
C Socket Socket: Connection timed out Netzwerkprogrammierung 3
T Empfangen klappt Senden nicht - Connection timed out Netzwerkprogrammierung 12
H java.net.ConnectException: Connection refused Netzwerkprogrammierung 3
RELAXccc HTTP Connection timed out: connect ?an was kann es liegen? Netzwerkprogrammierung 4
N Socket verliert die Connection. Netzwerkprogrammierung 4
A UCP Connection über Proxy möglich? Netzwerkprogrammierung 7
M RMI - Connection Problem Netzwerkprogrammierung 7
trash HTTP Internet Connection bei Proxy ?! Netzwerkprogrammierung 3
H RMI Connection refused bei RMI-Registry Netzwerkprogrammierung 10
S SSH-Connection - Auto-Vervollständigung mittels TAB Netzwerkprogrammierung 4
A Chatprogramm: Connection refused Netzwerkprogrammierung 4
T RMI RMI und VPN - callbackObject Connection refused Netzwerkprogrammierung 13
A Socket Client Server Connection wird aufgebaut aber keine daten geschickt. Netzwerkprogrammierung 5
J Connection Speed Test ohne Applet Netzwerkprogrammierung 5
0din Connection refused bei localhost?! Netzwerkprogrammierung 7
M FTP-Connection über FTP-Proxy Netzwerkprogrammierung 20
A RMI java.rmi.ConnectException: Connection refused to host: 1 Netzwerkprogrammierung 4
M chat funktioniert nicht (Connection refused: connect) Netzwerkprogrammierung 3
G InputStreamReader lässt TCP-Connection offen Netzwerkprogrammierung 9
X URL connection Problem Netzwerkprogrammierung 3
R ConnectException: Connection refused to host: 192.168.1.4 ? Netzwerkprogrammierung 8
tfa RMI-Problem: Connection refused to host: 127.0.0.2 Netzwerkprogrammierung 4
G Connection zu MySQL ohne ODBC Netzwerkprogrammierung 8
B RMI & Connection refused to host Netzwerkprogrammierung 12
G httpUnit: Connection timed out Netzwerkprogrammierung 3
lhein java.io.IOException: Unable to establish loopback connection Netzwerkprogrammierung 4
Paule Connection Applet Servlet ohne Socket bzw RMI Netzwerkprogrammierung 2
G MAC / IP Connection Netzwerkprogrammierung 10
M Problem: connection abbrechen und login erkennen Netzwerkprogrammierung 2
M Umlaute gehen bei URL Connection verloren Netzwerkprogrammierung 6
B RMI Connection Problem Netzwerkprogrammierung 13
T Dateien wia P2P Connection versenden Netzwerkprogrammierung 2
D Socketverbindung schlägt fehl - Connection refused: connect Netzwerkprogrammierung 4
H java.net.SocketException: Software caused connection abort Netzwerkprogrammierung 4
R FTP Connection zu Server Netzwerkprogrammierung 4
M Ausgangsport für FTp-Connection festlegen??? Netzwerkprogrammierung 3
M ObjectOutputStream reset gibt IOException Netzwerkprogrammierung 4
F IPv6 FF02::1 abfragen Netzwerkprogrammierung 0
U HTTP XML vom Server abholen oder http Abfragen, Entscheidung treffen Netzwerkprogrammierung 0
S IP - abfragen ? Netzwerkprogrammierung 14
D HTTP Checksumme von Dateien abfragen Netzwerkprogrammierung 2
P Verfügbarkeit Netzwerkdrucker abfragen Netzwerkprogrammierung 2
T Mac Adresse über Socket Verbindung abfragen? Netzwerkprogrammierung 9
S Mittels Java XML abfragen und nicht die Ausgabe-HTML-Datei Netzwerkprogrammierung 5
D "Füllstand" des Backlog abfragen. Netzwerkprogrammierung 4
G Land abfragen Netzwerkprogrammierung 5
F Seiteninhalte bei httpsurlconnection abfragen Netzwerkprogrammierung 12
sliwalker "Net Send" Erfolgsmeldung abfragen? Netzwerkprogrammierung 7
M Windows NT Domainnamen abfragen Netzwerkprogrammierung 3

Ähnliche Java Themen

Neue Themen


Oben