Problema Java – DatagramSocket tiene allocato il socket

Mi è capitato di scrivere del codice che scrive/legge da socket di rete ed ho riscontrato un baco (per me è un baco) che mi ha fatto perdere un sacco di tempo, il mio codice era simile a questo:

DatagramSocket s = new DatagramSocket(7777);
InetAddress indirizzo = s.getLocalAddress();
byte[] buf = new byte[65536];
DatagramPacket recv = new DatagramPacket(buf, buf.length);
s.receive(recv);
s.close

Sostanzialmente la prima riga crea un socket e fa il bind sulla porta locale 777 (prima riga in grassetto) poi il codice continua e aspetta dalla rete qualcosa (s.receive) e alla fine chiude e dealloca tutto (s.close). Il problema che ho riscontrato è che lui non deallocava un bel niente e rilanciando l’applicazione non riusciva più a fare il bind perchè rimaneva allocato dal giro di prima. Cercando in giro in internet ho risolto cambiando la prima riga così:

s = new DatagramSocket(null);
s.setReuseAddress(true);
s.bind(new InetSocketAddress(7777));

Sostanzialmente inizializza il socket a null poi fa il bind a mano. In questo caso quando fa la close (s.close) rilascia correttamente il socket a livello sistema operativo.

VN:F [1.9.22_1171]
Rating: 0.0/10 (0 votes cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)

Una mia intervista….

Dario Banfi (http://www.dariobanfi.it/) ha pubblicato una mia intervista su corriere comunicazioni. Se siete interessati potete leggerla a questo indirizzo:

http://www.corrierecomunicazioni.it/tlc/27970_java-l-esperanto-che-continua-a-fare-proseliti.htm

VN:F [1.9.22_1171]
Rating: 0.0/10 (0 votes cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)

Jasper Report (e java)- Confrontare due campi BigDecimal

Per eseguirre il confronto tra due campi di tipo BigDecimal usare la seguente formula:

new Boolean(CAMPO1.compareTo(CAMPO2) != 0)

Se dovete testare se il campo è uguale a zero allora:

new Boolean(CAMPO_DA_TESTARE.compareTo(BigDecimal.ZERO) != 0)

In alternativa si può usare il linguaggio Groovy come sintassi.

 

VN:F [1.9.22_1171]
Rating: 0.0/10 (0 votes cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)

Linux/Ubuntu – Installare Java7 della Oracle (sun)

Sul sito ufficiale non è presente il pacchetto .deb per le distribuzioni Linux derivate da debian. Per installarlo si deve procedere via script oppure se si vuole installare in modo semplice via repository:

  • sudo add-apt-repository ppa:webupd8team/java
  • sudo apt-get update
  • sudo apt-get install oracle-java7-installer
VN:F [1.9.22_1171]
Rating: 9.0/10 (1 vote cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)

Utilizzo i cookie per essere sicuro che tu possa avere la migliore esperienza sul mio sito. Se continui ad utilizzare questo sito assumo che tu ne sia felice.. maggiori informazioni

Questo sito utilizza i cookie per fonire la migliore esperienza di navigazione possibile. Continuando a utilizzare questo sito senza modificare le impostazioni dei cookie o clicchi su "Accetta" permetti al loro utilizzo.

Chiudi