|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Oct 2006
Messaggi: 1105
|
[JAVA] datagram socket - lunghezza massima payload
ciao ragazzi, ho cercato in lungo e in largo ma non sono riuscito a risolvere questo problema...
la lunghezza massima teorica del payload di un pacchetto udp è ((2^16 - 1) - 8). Ma se io in Java creo un DatagramSocket e faccio il send di un DatagramPacket passandogli un byte[] di lunghezza ((2^16 - 1) - 8) ottengo una SocketException perchè il pacchetto supera la lunghezza massima ammissibile ("The message is larger than the maximum supported by the underlying transport: Datagram send failed"). La lunghezza massima ammessa è ((2^16 - 1) - 8) - 20. Perchè???? Da notare inoltre come la documentazione del jdk1.6 non indichi che il metodo send può lanciare una SocketException!!! grazie a tutti per le risposte |
![]() |
![]() |
![]() |
#2 | |
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
EDIT: Ma indica chiaramente che può lanciare IOException. E infatti SocketException deriva da IOException.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) Ultima modifica di andbin : 11-07-2007 alle 14:57. |
|
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Oct 2006
Messaggi: 1105
|
cioè mi stai dicendo che l'errore è scatenato quando costruisco il pacchetto IP?
|
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
E' difficile che la documentazione prenda un abbaglio sulle eccezioni rilasciate. E' generata automaticamente a partire dal codice: se throws quello, throws pure la documentazione. Nel caso specifico, SocketException è una IOException, dunque rientra tra quelle che la documentazione dichiara come rilasciabili dal metodo send di DatagramSocket.
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me! |
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Perché 20 (o più) byte sono per l'header IP.
Comunque i pacchetti UDP sono solitamente pacchetti molto piccoli. Quindi utilizzare la massima lunghezza del pacchetto UDP è sconsigliabile, anche perché aumenta la probabilità di errore. Inoltre se il tuo pacchetto IP supera la MTU delle reti da cui passa verrà segmentato. L'MTU di una rete classica è di 1500 byte (headers + dati), quindi fai i tuoi conti ![]() |
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
No, non sei tu che crei il pacchetto IP. Il tuo payload byte[] viene messo in un pacchetto UDP che a sua volta viene poi messo in un pacchetto IP che a sua volta ecc..... tutto secondo il modello OSI.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
![]() |
![]() |
![]() |
#7 |
Senior Member
Iscritto dal: Oct 2006
Messaggi: 1105
|
grazie a tutti
![]() |
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: Oct 2006
Messaggi: 1105
|
si, lo so, per costruisco intendevo "quando il mio sistema costruisce..."
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 21:07.