package elte.java2_utikalauz5.net; import java.net.*; import java.io.*; import java.lang.Math; /** Egy olyan UDP-alapú kommunikációs végpont, amely nyugtázással és szükség szerinti újraküldéssel biztosítja a viszonylag megbízható adatátvitelt. @link.forrásfájl {@docRoot}/../data/net/src MegbizhatoEgyiranyuDatagramSocket.java @since Java 2 Útikalauz programozóknak 1.3 */ public class MegbizhatoEgyiranyuDatagramSocket extends FeledekenyDatagramSocket { private byte számláló=0; // az éppen elküldött csomag sorszáma private byte előzőleg_érkezett_csomag_számlálója=0; private boolean tmout_beállítva=false; // beállítottuk már az // időtúllépés figyelését? private boolean első_csomag=true; // fogadtunk már csomagot ezen a // kommunikációs végponton? public MegbizhatoEgyiranyuDatagramSocket() throws SocketException { super(); } public MegbizhatoEgyiranyuDatagramSocket(int p) throws SocketException { super(p); } public MegbizhatoEgyiranyuDatagramSocket(int p, InetAddress la) throws SocketException { super(p,la); } private void inkrementál() { számláló=(byte)((számláló+1)%256); // 255-nél nullára forog át ... } private byte inkrementált(byte b) { return (byte)((b+1)%256); } // Egy bájt méretű segédadattal kiegészített UDP-csomag elküldése // Lényeg: az átküldeni kívánt csomag tartalmát egy új csomagba // másoljuk, és elől kiegészítjük az elküldeni kívánt bájttal. private void mb_send(DatagramPacket p, byte b) throws IOException { InetAddress ip_cím = p.getAddress(); int server_port = p.getPort(); int eredeti_üzenet_hossz = p.getData().length; byte[] eredeti_üzenet = p.getData(); byte[] újüzenet = new byte[eredeti_üzenet_hossz+1]; újüzenet[0]=b; // kiegészítjük az elküldeni kívánt bájttal for (int i=0;i