Frage

Ich bin mit einem Serversocket auf meinem Server und Sockets, die ObjectIOStreams verwenden serialisierbare Objekte über die Netzwerkverbindung zu senden. Ich entwickle eine wesentlich mehr finanzielle Version des Monopols und damit Pakete gesendet und als abgeschickt bestätigt / empfangen erforderlich ist. Muss ich meine eigenen Paketverlust Beobachter implementieren oder wird, dass bereits betreut mit (Server) Sockets?

Ich frage in erster Linie um Pakete während der Netzwerk-Blips oder Dingsbums zu verlieren, nicht die vollen Verbindungsfehler. Z.B. Geschwister bewegen, um eine Bleiplatte zwischen meinem Router und WLAN-Adapter des Computers.

http://code.google. com / p / Unbilligkeit / source / browse / # svn / trunk / src / Netzwerk Code kann unter netz-> ClientController und netz-> Server

War es hilfreich?

Lösung

Theoretisch; Ja. Es gibt keine Art und Weise 100% theoretische Garantie geben, dass, was auf der Hardware-Ebene gesendet wird, wird auf die gleiche Weise auf der Empfängerseite empfangen wird.

Praktisch jedoch, wenn Sie TCP (Transmission Control Protocol) dieses Material wurde bereits gesorgt; Sie werden keine Pakete verlieren. (Wenn Sie mit UDP auf der anderen Seite (User Datagram Protocol) es ist eine andere Geschichte, und es kann sehr wohl der Fall sein, dass Sie Pakete sind zu verlieren, oder sie aus, um Empfangen).

sah nur kurz auf den Code, und es scheint, dass Sie mehrere Threads verwenden. Wenn so dass Sie mit der Synchronisation äußerst vorsichtig sein müssen. Es könnte sehr gut der Fall sein, dass es aussieht wie ein Paket fallen gelassen wurde, obwohl, es ist einfach nicht aufgrund einer Racebedingung im Programm behandelt. (Beachten Sie, dass der gui zum Beispiel läuft in einem eigenen Thread.)

Der beste Weg, um die Synchronisation zu lösen, glaube ich, ist die Netzwerkschleife in einer sehr kleinen Schreib- / put-on-synchronisierte-Warteschlange Schleife zu setzen, und die empfangenen Pakete aus der Warteschlange abholen, wenn Sie sicher, dass keine sind andere Gewinde eingreifen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top