2017-05-01 15 views
0

Javaでチャットを作成しました。これは、画面上で送受信されたメッセージを表示します。問題は、メッセージを送信するときに以前に送信された値が取得されていることです。たとえば、「Microsoft」と書かれたメッセージを送信し、「Apple」と書かれた別のメッセージを送信します。ディスプレイに「Applesoft」と表示されている場合、DatagramPacketを空にしていないようです。何ができますか?DatagramPacketは値を累積しています

class Recebe implements Runnable { 

     @Override 
     public void run() { 
      byte[] dadosReceber = new byte[255]; 
      boolean erro = false; 
      DatagramSocket socket = null; 
      while (true) { 
       try { 
        socket = new DatagramSocket(getPorta()); 
       } catch (SocketException ex) { 
        Logger.getLogger(Conexao.class.getName()).log(Level.SEVERE, null, ex); 
       } 
       erro = false; 
       while (!erro) { 
        DatagramPacket pacoteRecebido = new DatagramPacket(dadosReceber, dadosReceber.length); 
        try { 
         socket.receive(pacoteRecebido); 
         byte[] b = pacoteRecebido.getData(); 
         String s = ""; 
         for (int i = 0; i < b.length; i++) { 
          if (b[i] != 0) { 
           s += (char) b[i]; 
           System.out.println("Valor S: " + s + " "); 
          } 
         } 

//      if (!s.equals(new GeraHash().MD5("envie a chave publica!!!"))) { 
          String nome = pacoteRecebido.getAddress().toString() + " disse:"; 
          notifica(nome + s); 
          System.out.println("Dados Recebe 2: " + s + " "); 
//      } else { 
//       conexaoAtual().envia("Funcionou!"); 
//       System.out.println("Dados Recebe 1: " + s + " "); 
//      } 

        } catch (Exception e) { 
         System.out.println("erro"); 
         try { 
          Thread.sleep(100); 
         } catch (InterruptedException ex) { 
          Logger.getLogger(Conexao.class.getName()).log(Level.SEVERE, null, ex); 
         } 
         erro = true; 
         continue; 
        } 
       } 
      } 
     } 
    } 

答えて

0
socket.receive(pacoteRecebido); 
byte[] b = pacoteRecebido.getData(); 
String s = ""; 
for (int i = 0; i < b.length; i++) { 
if (b[i] != 0) { 
    s += (char) b[i]; 
    System.out.println("Valor S: " + s + " "); 
} 

通常の問題。 DatagramPacket.getLength()で与えられた受信データグラムの実際の長さを無視しています。すべてを減らすことができます:

socket.receive(pacoteRecebido); 
System.out.println(new String(pacoteRecebido.getData(), 0, pacoteRecebido.getLength()); 
関連する問題