Socket Socket absichtlich so schließen, dass Gegenseite java.net.SocketException: Connection reset wirft

DougUndPizza

Mitglied
Hallo zusammen,

der Titel das Threads sagt es eigentlich schon.


Ausführlicher:

Ich übertrage eine Datei über eine Socketverbindung und der Sender schließt den Socket, sobald die Datei komplett übertragen ist.
Der Empfänger weiß nicht, wie groß die Datei ist und liest solange, bis inputStream.read(....) -1 zurückgibt.
Wie allgemein bekannt ist, gibt die Methode -1 zurück, wenn der Socket der Gegenüberseite normal geschlossen wurde.

Nun möchte ich aber, falls der Sender den Befehl zum herunderfahren bekommt und die Datei noch nicht vollständig übertragen worden ist, den Socket dort nicht "normal" schließen, sondern so, dass die read Methode des Empfängersocket eine Exception wirft.

Das erreicht man auch, wenn man bei Eclipse bei dem entsprechenden Programm, das den Datei sendenden Socket hat, die "Stop" Taste drückt. -> beim Empfänger java.net.SocketException: Connection reset

Wie kann ich es also erreichen, einen Socket so zu schließen, dass die read Methode des Gegensocket eine Exception wirft?


Danke schonmal fürs lesen

DougUndPizza
 
Zuletzt bearbeitet:
Machs ordentlich, schick einfach am anfang die size mit.

Joa, das wäre natürlich am einfachsten.
Ich möchte aber die Möglichkeit bieten, einem Clienten einfach einen Input-/OutputStream zu einer irgendwo liegenden Datei zu geben, und er liest/ schreibt einfach.
Es soll also quasi möglich sein, dass der Client seine Daten direkt on the Fly in eine entfernt liegende Datei schreibt, also quasi: In OutputStream von Socket, der dann auf entfernter Seite ausgelesen und in Datei geschrieben wird. Und hier steht wegen dieses Konzeptes die Größe zum Zeitpunkt des Öffnens des Outputstreams nicht fest.

Deshalb dachte ich, nutze ich halt einen Mechanismus auf TCP Ebene, der ja anscheinend funktioniert (mit Eclipse Stop Taste). Wahrscheinlich wird kein regulärer 4 Way Handschake zum Abschluss gemacht, sondern einfach von der Seite, wo der Socket brutal geschlossen wird nur ein FIN flag gesetzt oder keine Bestätigungen für die zuletzt empfangenen Pakete geschickt - oder so ähnlich.
 

Neue Themen


Zurück
Oben