2010-07-22 5 views
0

J'utilise ce code pour recevoir des données d'un socket UDP et le retourner sous forme de chaîne:écoute sur socket UDP

byte[] receiveData = new byte[MAX_PACKET_SIZE]; 
DatagramPacket receivedPacket = new DatagramPacket(receiveData, receiveData.length); 
serverSocket.receive(receivedPacket); 
return new String(receivedPacket.getData(), 0, receivedPacket.getLength()); 

Je mis Max_Packet_Size à 1024 qui provoque Java pour réserver un 1024bit à long octet [] chaque fois qu'un le paquet arrive. Cela provoque un lot de surcharge si le paquet est beaucoup plus petit que 1024 octets.

Existe-t-il un meilleur moyen d'y parvenir? Peut-être avec une sorte de cycle de lecture while()? Je ne suis pas encore très familier avec Java. :)

Répondre

1

Vous pouvez réutiliser le paquet si vous voulez éviter le surdéveloppement de la création de plusieurs tableaux (bien que les objets de courte durée aient en réalité très peu d'impact sur les performances).

Notez que vous ne pouvez pas lire un datagramme UDP dans des blocs, car tout ce qui est au-delà de la fin du DatagramPacket que vous passez à receive est ignoré.

Modifier - J'ai coché, et DatagramChannel.receive est à peu près la même chose. Vous avez vraiment besoin de vous assurer que votre tampon est assez grand pour recevoir le plus grand datagramme possible.

Questions connexes