DatagramSocket und Benutzerrechte



  • grüßt euch, gesundes neues und so weiter ... ^^

    ich steh grad aufm schlauch, ich arbeite mit DatagramSocket, ums genau zu nehmen leite ich davon eine meiner klassen ab ....

    nur scheint es probleme mit eingeschränkten nutzerrechten zu geben .... in einem versuch auf einem linuxrechner spuckte er mir verschiedene fehler(warnungen) aus, die sich zum teil auf den security manager bezogen ... leider hab cih in der beziehung noch nicht gearbeitet

    liegt es jetzt daran dass ich die klasse abgeleitet habe oder allgemein an DatagramSocket dass es nicht geht ?

    weis jemand vielleicht einen ausweg oder kann mir einen tipp geben in welche richtung ich weitersuchen kann damit ich mich nicht in sackgassen verrenne

    als adminberechtigter auf nem windoof rechner ging es problemlos



  • Nabend,
    also da es auf nem Windowsrechner ging, liegt es vermutlich wirklich an den Rechten.... Mir ist aller dings nicht klar warum. Ich würde es testen, allerdings habe ich keinen Linuxrechner... Versuch doch mal dein jar oder was auch immer auf Linux mit sudo auszuführen. Wenn ich mich recht errinnere war das doch der Befehl, um etwas als Admin zu mchen richtig ?

    Gruß Chris



  • mh also nachdem ich ein wenig dran gearbeitet habe, treten die fehler zumindest nicht mehr so brachial auf ... wenn ich mal probleme bekomme fang ichs einfach im catch() ab, reagiere darauf und versuche es erneut

    jetzt hab cih zwar zu jedem fehler auch ne mehr oder minder ausführliche fehlerbeschreibung gemacht aber seltsamerweise verschweigt das programm jetzt alles .... keine fehlermeldung, aber auch keine datagramme .... zwischen 2 windowsrechnern gehts aber der linuxrechner will weder ein datagram senden noch eins empfangen ... leider steht mir kein linux zur verfügung zum testen und ich darf hier auch keins drauf machen ... noch besser ... ich kanns ncihtmal über remotedesktop versuchen, weil der server in nem anderen subnetz hängt und broadcasts geblockt werden ... testen kann cihs nur wenn ich nen kollegen vom pc verscheuche ... sehr verzwickt

    public class MyBroadcaster extends DatagramSocket {
    	public static final byte CONNECTION_OK = 0;
    	public static final byte CONNECTION_FAILED = 80;
    	public static final byte CONNECTION_TIMEOUT = 81;
    	public static final byte CONNECTION_ABORTED = 82;
    	public static final byte CONNECTION_CLOSED = 83;
    	public static final byte CHECKSUM_ERROR = 84;
    	public static final byte SOCKET_ERROR = 85;
    	public static final byte DISCONNECTED = 100;
    	public static final byte CONNECTED = 101;
    	public byte Status = DISCONNECTED;
    	public String LastErrorMessage;
    	public int LastErrorCode;
    
    	public MyBroadcaster(int arg0) throws IOException {
    		super(arg0, InetAddress.getLocalHost());
    		try {
    			System.out.println(InetAddress.getLocalHost().toString());
    			this.setReuseAddress(true);
    		} catch(SocketException e) {
    			LastErrorCode = SOCKET_ERROR;
    			LastErrorMessage = "Error: ReuseAddress()";
    			throw e;
    		}
    	}
    
    	public byte getStatus() {
    		return Status;
    	}	
    
    	public String getLastErrorMessage() {
    		return LastErrorMessage;
    	}
    
    	public int getLastErrorCode() {
    		return LastErrorCode;
    	}
    
    	public synchronized boolean Close() {
    		close();
    		Status = DISCONNECTED;
    		return true;
    	}
    
    }
    
    public synchronized boolean SendRequest(byte i){
        	byte[] T = new byte[6];
        	T[0] = (byte)XXXX;
        	T[1] = (byte)XXXX;
        	T[2] = (byte)XXXX;
        	T[3] = (byte)XXXX;
        	T[4] = i;
        	T[5] = (byte)XXXX;
        	try {
        		InetAddress S = InetAddress.getByName("255.255.255.255");
    			Broadcaster.send(new DatagramPacket(T, 6, S, 2009));
    		} catch (UnknownHostException e) {
    			// TODO Auto-generated catch block
    			return false;
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			return false;
    		}
        	return true;
        }
    

    so sieht der momentan getestete code aus



  • update:

    das senden geht jetzt aber der empfang will einfach nciht gelingen .... es gab schon andere mit dem problem unter linux, dass die pakete zwar im stack des port landen aber nciht abgerufen werden ... receive hab cih mit sotimeout 1000 versehen und er bricht auch fein nach einer sekunde ab, dann schick ich den thread in den yield ... aber er will die pakete einfach nciht lesen ... der socket ist gebunden, ich verwende dazu den konstruktor mit port und adresse

    DatagramSocket(PortNr, InetAddr.getlocalHost());

    instantiiert wird der port mittlerweilen sogar IM thread der das auslesen übernimmt, für den fall dass es threadprobleme gibt, leider ohne erfolg



  • oh mann, kommt sowas immer raus wenn man C programmierer auf Java loslässt?

    ps: vllt kann dir jemand helfen wenn du mal die fehlermeldung postest... ?


Anmelden zum Antworten