La maggior parte dei datagrammi che ricevono funzioni come recV o read di c, classe DatagramPacket javas o SocketServer pythons, includono la possibilità di scoprire la quantità di dati ricevuti.I datagrammi sono sempre ricevuti completamente?
c:
int amount = recv(sock, buf, n, MSG_WAITALL);
java:
int amount = datagramSocket.getLength();
pitone:
class MyUDPHandler(socketserver.BaseRequestHandler):
def handle(self):
amount = len (self.request[0])
Sono questi affidabile? Oppure è possibile che vengano ricevute solo parti del messaggio, a causa ad esempio della frammentazione dei pacchetti o del ritardo della rete?
In altre parole: quando invio un blocco di dati di lunghezza variabile via udp e lo ricevo dall'altra parte, questi valori sono esattamente uguali alla dimensione del blocco originale?
Modifica:
ninjalj ha fatto un buon punto e voglio includerlo qui. Cosa succede quando la funzione di ricezione viene interrotta, ad esempio da un segnale? Cosa succede quando due thread cercano contemporaneamente di ricevere dallo stesso socket?
just fyi, il tuo codice java ha una grave mancanza di ortografia di "Lunghezza" – Necrolis