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