2009-04-24 3 views
-1

J'ai écrit un programme de socket en utilisant read() et write(). Chaque fois que je veux envoyer de grandes données en utilisant write(). Je suis incapable de recevoir des données à la fois. Cela signifie que mes données sont divisées en deux sections. Comment puis-je envoyer une grande quantité de données? ou lire les données à 1 heure?Java programme de socket incapable de lire une grande quantité de données à la fois

Aussi je suis incapable de savoir si c'est le problème de write() ou read()

Merci Bapi

+1

Est-ce un doublon de votre question hier? http://stackoverflow.com/questions/780373/read-and-write-method-for-large-data-in-socket-communication-does-not-work-reliab – Thilo

+0

Peut-être que vous pourriez expliquer ce que vous avez essayé à partir des réponses vous avez reçu hier et nous pouvons partir de là. –

+0

J'ai essayé toute l'approche d'hier. J'ai également appliqué le fil de sommeil pendant 1 sec cela fonctionne bien mais c'est fiable mais selon mon inquiétude de réseau. – Deepak

Répondre

2

lecture() est garanti que pour lire 1 octet, rien de plus est un bonus.

Une façon courante de gérer cela est d'utiliser DataOutputStream et DataInputStream pour envoyer la taille du "bloc" que vous voulez.

public static void write(DataOutput out, byte[] bytes) throws IOException { 
    out.writeInt(bytes.length); 
    out.write(bytes); 
} 

public static byte[] read(DataInput in) throws IOException { 
    int len = in.readInt(); 
    byte[] bytes = new byte[len]; 
    in.readFully(bytes); 
    return bytes; 
} 
+0

En fait, il n'est même pas garanti de lire autant ... le socket peut être en mode non-bloquant; . –

Questions connexes