PDA

View Full Version : [JAVA] Qale classe Java gestisce la connessione alla rete del sistema?


Speed_89
26-02-2010, 12:04
Salve a tutti, qualcuno sa indicarmi la classe Java che gestisce la connessione ad internet del sistema?
Mi serve tale classe per estrapolare informazioni quali velocità di upload e download, quantità di dati trasmessi e ricevuti, e per offrire funzioni quali chiusura della connessione e riavvio della connessione...

clockover
26-02-2010, 12:22
Di classi ce ne sono molte! Dai uno sguardo al package java.net

banryu79
26-02-2010, 12:28
Io ti consiglio una lettura ai Java Tutorials:
- Trail: Custom Networking (The Java Tutorials) (http://java.sun.com/docs/books/tutorial/networking/index.html)

PGI-Bis
26-02-2010, 12:28
Credo che voglia una sorta di gestione delle connessioni di rete. Non c'è una librerie Java - quantomeno non nel jre - che lo faccia, devi interfacciarti al sistema operativo con JNI.

banryu79
26-02-2010, 12:30
Credo che voglia una sorta di gestione delle connessioni di rete. Non c'è una librerie Java - quantomeno non nel jre - che lo faccia, devi interfacciarti al sistema operativo con JNI.


Mi serve tale classe per estrapolare informazioni quali velocità di upload e download...


Ops, mi sa che hai ragione :stordita:

clockover
26-02-2010, 12:32
Credo che voglia una sorta di gestione delle connessioni di rete. Non c'è una librerie Java - quantomeno non nel jre - che lo faccia, devi interfacciarti al sistema operativo con JNI.
già :stordita: :stordita:

nuovoUtente86
26-02-2010, 12:51
Se il suo interesse è simulare uno dei tanti test di velocità già presenti, possono bastare anche solo i socket, in quanto alla fine va a calcolarsi i valori visti dal livello applicazione (quello che di solito si fa scambiando un file di grosse dimensioni, con la differenza che si tiene conto del tempo di scrittura su disco) con solo l' overhead introdotto dalla computazione della jvm, che potrebbe essere trascurabile.

Speed_89
26-02-2010, 13:12
Credo che voglia una sorta di gestione delle connessioni di rete. Non c'è una librerie Java - quantomeno non nel jre - che lo faccia, devi interfacciarti al sistema operativo con JNI.

Si, in effetti è proprio quello che voglio! :)
Ma anzichè utilizzare il JNI, non c'è un modo per non perdere astrazione rispetto al sistema operativo?
Avete parlato anche dei socket, ma da come ho capito i socket non servono ad instaurare connessioni tra due programmi mediante la rete? Quel che voglio fare io invece è del tutto differente...

PGI-Bis
26-02-2010, 15:27
I socket in questo caso non c'entrano nulla.

L'astrazione la mantieni anche con JNI. Si tratta semplicemente di definire la tua interfaccia al servizio di sistema, ad esempio una cosa tipo:

class ConnectionMonitor{

public boolean isSupported() {
..verifica se hai una libreria dinamica disponibile
}

/** Attiva il monitoraggio della connessione */
public native void open();

public native float getAverageUploadSpeed();

public native float getAverageDownloadSpeed();

/** quanti bytes sono stati inviati a partire da open() */
public native long getSentBytesCount();

/** quanti bytes sono stati ricevuti a partire da open() */
public native long getReceivedBytesCount();

/** Termina il monitoraggio della connessione */
public native void close();

/** Termina la connessione */
public native void stopConnection();

/** Attiva la connessione */
public native void startConnection();
}

Meglio sarebbe dare un'occhiata a msdn e agli omologhi unix per capire quali siano i tratti comuni del servizio che ti permette di fare quello che vuoi.

Poi col tuo modulo JNI vai a collegare queste funzioni al sistema.

Tra manuali, tutorial e siti di riferimento scovare manciata di linee di codice C che ti permettono di definire funzioni come queste - che sono di livello relativamente alto - è raramente complicato.

Speed_89
26-02-2010, 17:12
Ok, penso di aver afferrato il concetto...

Correggetemi se sbaglio...

1) devo creare una dll in c che implementi queste funzioni

2) devo creare una classe come quella suggeita da PGI-bis, che richiami le funzioni della precedente dll... Ma in questa classe,
devo definire o no le funzioni dichiarate come native? E che significato ha "native"? Che l'associazione metodo->implementazione sarà risolta a runtime quando sarà trovata la dll?

Speed_89
26-02-2010, 18:12
Mi sto uccidendo per trovare la libreria con le funzioni che fann oal caso mio...
Sono incappato nella "WinInet.dll", ma non riesco a trovare uno straccio di documentazione! :(

Niente...

Qualcuno conosce la libreria di windows che contiene le funzioni per la gestione della connessione alla rete? :S

PGI-Bis
26-02-2010, 21:20
Per windows prova a cercare su MSDN.

Per JNI, crei prima la classe coi metodi nativi, poi la compili con javah... non è affatto difficile ma sono richiesti un po' di passaggi.

Qui c'è un tutorial di S..Oracle (:cry: )

http://java.sun.com/developer/onlineTraining/Programming/JDCBook/jni.html

Qui ce il manualozzo di JNI

http://java.sun.com/j2se/1.5.0/docs/guide/jni/spec/jniTOC.html

PS: sempre riguard a msdn, prova a partire da qui

http://msdn.microsoft.com/en-us/library/ee663286(VS.85).aspx

e vedi se trovi qualcosa.