2017-10-26 2 views
-1

Ich muss Pufferleser verwenden, um über Sockets zu kommunizieren, und ich fragte mich nur, wie ich die neuen Zeilen beibehalten konnte. Ich möchte dies schließlich in der Kryptographie verwenden, so dass ich nicht davon ausgehen kann, dass neue Zeilen am Ende der Nachricht stehen.Wie newLine Zeichen enthalten, die BufferedReader ignoriert

Ich bin neu an Sockets im Allgemeinen, so würde jede Hilfe sehr geschätzt werden.

Der Text der Client-Seite ist

ct.txt3nd0fh34d3rl1n31663nd0fh34d3rl1n3This is a test message to see if the file decrypts properly. Nothing special in this file. 
    Just a pure test to see if my code works. Two chemists walk into a bar... 

die Länge der Zeichenfolge zu senden ist 205

in der Seite Server i

erhalten
ct.txt3nd0fh34d3rl1n31663nd0fh34d3rl1n3This is a test message to see if the file decrypts properly. Nothing special in this file. 
    Just a pure test to see if my code works. Two chemists walk into a bar... 

die Länge dieses einen 206 ist, Es fügt am Ende 1 neues Zeilenzeichen hinzu. Dies war, nachdem ich versucht habe, einige Lösungen zu implementieren, die ich fand, aber sie funktionierten nicht, da ich um 1 Zeichen abwich. Hier ist der Code, dass der Client-Eingang

while (incoming != null) 
    { 
     /* If the client has sent "exit", instruct the server to 
     * remove this thread from the vector of active connections. 
     * Then close the socket and exit. 
     */ 
     if (incoming.compareTo("exit") == 0) 
     { 
      parent.kill (this); 
      try { 
       in.close(); 
       sock.close(); 
      } 
      catch (IOException e) 
      {/*nothing to do*/} 
      return; 
     } 

     /* If the client has sent "die", instruct the server to 
     * signal all threads to shutdown, then exit. 
     */ 
     else if (incoming.compareTo("die") == 0) 
     { 
      parent.killall(); 
      return; 
     } 

     System.out.println("LINE: " + incoming.length() + " " + incoming); 
     if(incoming.equals("3nd0f5krr4hf1l3") && !msgGotten) 
     { 
      //Decrypt 
      SecretKeySpec key = CryptoUtilities.key_from_seed("H".getBytes()); 

      System.out.print(message); 
      System.out.println(message.length()); 
      byte[] encryptedMessageAndDigest = message.getBytes(); 
      byte[] decryptedMessageAndDigest = CryptoUtilities.decrypt(encryptedMessageAndDigest, key); 

      if(CryptoUtilities.verify_hash(decryptedMessageAndDigest, key)) 
      { 
       byte[] headerMessage = CryptoUtilities.extract_message(decryptedMessageAndDigest); 

       String payload = new String(headerMessage); 

       String[] plainTextArray = payload.split("3nd0fh34d3rl1n3", 3); 
       String fileName = plainTextArray[0]; 
       byte[] plaintextBytes = plainTextArray[2].getBytes(); 

       try 
       { 
        FileOutputStream fos = new FileOutputStream(fileName); 
        fos.write(plaintextBytes); 
        fos.close(); 
       } 
       catch (IOException e) 
       { 
       } 
      } 
      else 
      { 

      } 
     } 
     else 
     { 
      /* Otherwise, just echo what was received. */ 
      //System.out.println ("Client " + idnum + ": " + incoming); 

      if(incoming.length() == 0) 
      { 
       message = message + "\n"; 
      } 
      else 
      { 
       message = message + incoming + "\n"; 
      } 

     } 

Vielen Dank im Voraus liest!

EDIT: am Ende meiner ersten Übertragung, ich sende 3.ndf5krr4hf1l3 bedeuten es. Ich würde readLine() benötigen, also kann ich in einem gehen, aber wenn read() ist wirklich der beste Weg zu gehen, wie würde ich das implementieren? Würden die \ n (\ r \ n) Schreiber in einer Lektüre durchkommen?

Antwort

1

Wenn Sie nicht davon ausgehen können, dass es Abschlusswiderstände gibt, können Sie readLine() natürlich nicht verwenden. Sie sollten eine der read() Überladungen verwenden.

Würde die \n (\r\n) Schreiber in einem Read durchkommen?

Alle Zeichen werden in einem read() durchkommen.

+0

Sorry, was ich meinte ist, dass, wenn ein Newline im Originaltext ist, Tokens zu trennen, aber ich kann nicht scheinen, es funktioniert, wenn das Token ist = Newline. – shadowforce100

+1

Ich kann nicht Kopf oder Schwanz davon machen, aber wenn Sie die Zeilenabbrecher erhalten wollen, verwenden Sie 'readLine()' nicht. – EJP