En travaillant sur un serveur WebSocket Java, j'ai rencontré ce bug étrange. Je l'ai réduit à deux petits fichiers Java, l'un est le serveur, l'autre est le client. Le client envoie simplement 0x00
, la chaîne Hello
puis 0xFF
(conformément à la spécification WebSocket).Problème de socket Java sur linux (0xFF envoyé, -3 reçu)
Sur ma machine Windows, le serveur imprime les éléments suivants:
Listening
byte: 0
72 101 108 108 111 recieved: 'Hello'
Tout sur ma boîte unix même imprime le code les éléments suivants:
Listening
byte: 0
72 101 108 108 111 -3
Au lieu de recevoir 0xFF il obtient -3, ne sort jamais de la boucle et n'imprime jamais ce qu'il a reçu.
La partie importante du code ressemble à ceci:
byte b = (byte)in.read();
System.out.println("byte: "+b);
StringBuilder input = new StringBuilder();
b = (byte)in.read();
while((b & 0xFF) != 0xFF){
input.append((char)b);
System.out.print(b+" ");
b = (byte)in.read();
}
inputLine = input.toString();
System.out.println("recieved: '" + inputLine+"'");
if(inputLine.equals("bye")){
break;
}
J'ai aussi téléchargé les deux fichiers sur mon serveur:
Mon ordinateur Windows exécute Windows 7 et ma machine Linux est r unning Debian
Edit:
Lorsque b est un entier, il agit toujours étrange. J'envoie 0xFF (255) mais reçois 65533 (pas 65535 ou 255).
intéressant .... – aioobe
Ah, merci, le lecteur était le problème: D – Marius