Ma question est similaire à ce post. Mais je n'envoie pas de longueur de paquet plutôt un 0 octet à la fin. Donc, je me demande comment je pourrais coder quelque chose qui le ferait.Comment lire le flux java jusqu'à ce qu'un certain octet soit atteint
Au moment où je viens d'utiliser
this.socketIn = new BufferedReader(new InputStreamReader(this.socket.getInputStream()));
String line = this.socketIn.readLine();
Si paquet s'envoyé pendant que vous spamming le paquet, il va compter le paquet qui n'a pas encore arrivé comme lu entièrement la ligne, mais il est incomplet et bousille tout le protocole.
Dans mon protocole, chaque paquet est terminé avec un 0 octet (0x00) pour déterminer la fin d'un seul paquet si les paquets finissent par être fusionnés/empilés ensemble. Donc, ce que j'essaie de faire est de continuer à lire le flux socket jusqu'à ce qu'un 0x00 soit atteint pour indiquer que le paquet est entièrement conçu et prêt pour le traitement .. et bien sûr une sorte de sécurité (un timeout est le meilleur croire) pour déterminer le paquet est indésirable car il n'est pas terminé dans un octet 0 dans un laps de temps spécifique laisse dire 5 secondes.
Comment ferais-je cela? Je n'utilise pas le framework NIO mais juste un thread régulier par socket de connexion et je ne veux pas passer à NIO car il est très difficile d'injecter des données avec un thread global complètement différent qui traite les mises à jour et envoie mises à jour spécifiques aux utilisateurs aléatoires (non diffusés).
Voici ce que j'ai essayé jusqu'ici.
String line = "";
int read;
long timeOut = System.currentTimeMillis();
while(true) {
read = this.socketIn.read();
if (read == -1 || read == 0 || (System.currentTimeMillis()-timeOut) > 5000)
break;
line += read
}
Quel est le problème avec ce que vous avez essayé jusqu'à présent? BTW utilise Socket.setSoTimeout(), ne développe pas le vôtre. – EJP
Haha remercie EJP je ne savais pas qu'une commande tmeout existait. – SSpoke