die Erkennung von TCP/IP-packet-loss

Habe ich die tcp-Kommunikation über das socket-code wie :

public void openConnection() throws Exception
{
   socket = new Socket();
   InetAddress iNet = InetAddress.getByName("server");
   InetSocketAddress sock = new InetSocketAddress(iNet, Integer.parseInt(port));
   socket.connect(sock, 0);

   out = new PrintWriter(socket.getOutputStream(), true);
   in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
}

- und send-Methode als :

synchronized void send(String message)
{
 try
 {
    out.println(message);
 }
 catch (Exception e)
 {
    throw new RuntimeException(this.getClass() + ": Error Sending Message: "
        + message, e);
 }
}

Und ich Lesen von Webseiten, auf denen TCP/IP nicht garantieren, Lieferung Paket, wiederholt es aber, wenn Netz ist zu sehr damit beschäftigt, Paket kann gelöscht werden([link]).Eins

Pakete können gelöscht werden, wenn die übertragung von Daten zwischen Systemen aus zwei wichtigen Gründen:

  • Schwere Netzwerk-Auslastung und die daraus resultierenden Staus
  • Fehlerhafte Netzwerk-hardware oder Anschlüsse

TCP wurde entwickelt, um in der Lage sein zu reagieren, wenn Sie Pakete in einem Netzwerk. Wenn ein Paket erfolgreich an seinen Bestimmungsort, das Ziel-system sendet eine Bestätigungsnachricht zurück an die Quell-system. Wenn diese Bestätigung nicht innerhalb einer bestimmten Intervall, kann das entweder daran, dass das Ziel-system nie das Paket erhalten hat, oder weil das Paket mit der Bestätigung war selbst verloren. In jedem Fall, wenn die Bestätigung nicht empfangen wird, durch die source-system in der vorgegebenen Zeit, die source-system wird davon ausgegangen, dass das Ziel-system noch nie die Nachricht erhalten und sendet es neu aus. Es ist leicht zu sehen, dass, wenn die Leistung des Netzes schlechter, Pakete gehen verloren in den ersten Platz, und die erhöhte Belastung aus diesen weiterleiten von Nachrichten ist nur die Erhöhung der Last auf das Netzwerk, was bedeutet, dass mehr Pakete verloren gehen. Dieses Verhalten kann dazu führen, dass sehr schnell die Bildung einer kritischen situation auf das Netzwerk.

Gibt es eine Möglichkeit, dass ich erkennen kann wenn Paket erfolgreich empfangen wurde durch das Ziel ist oder nicht, ich bin nicht sicher, dass out.println(message); wirft eine Ausnahme, als dieses ist, nicht blockierenden Aufruf. Es wird die Nachricht in einem Puffer und zurück zu lassen, TCP/IP seine Arbeit tun.

Hilfe?

  • Das ganze Weiterverbreitung Prozess erfolgt in einer anderen Ebene. Sie don ' T haben Zugang zu über Java. Es ist für Sie erledigt.
  • Aber ist garantiert, dass die re-übertragung auftreten wird, und erfolgreich zu sein? Kann es nicht scheitern?
  • Das ist TCP für Sie. Es wird weiterhin wiederholt (mehr oder weniger). Sie würde wahrscheinlich ein timeout-Fehler, wenn es nicht erfolgreich war, nach einer gewissen Zeit.
  • ja, über das timeout, wo bekomme ich das timeout? In java oder woanders?
  • Es wird weitergegeben, um Java, ja. Überprüfen Sie heraus die Socket javadoc.
InformationsquelleAutor Batty | 2014-07-01
Schreibe einen Kommentar