2016-05-06 17 views
0

Мой код выглядит следующим образом. Все работает так, как я этого хочу, но когда мои сообщения получаются, у них много коробок на конце, что-то вроде этого «Сообщение: привет» ▀▀▀▀▀▀▀ «Как я могу сделать так, чтобы получилось и напечатано только« Сообщение: привет »? Я очень благодарен за любую помощь.Сообщение, отправленное в UDP-датаграмме, не дезинфицировано?

import java.io.*; 
import java.net.*; 

public class UDPChat { 

    public static void main(String args[]) throws Exception { 

     new UDPChat(); 
    } 


    public UDPChat() { 
     try { 
      runChat(); 
     } catch (Exception e) { 
     }} 

    public void runChat() throws InterruptedException { 
     Sender sender = new Sender(); 
     Receiver receiver = new Receiver(); 
     sender.start(); 
     receiver.start(); 
     sender.join(); 
     receiver.join(); 
    } 

    class Receiver extends Thread { 
     public void run() { 
      try { 
       DatagramSocket serverSocket = new DatagramSocket(9876); 
       byte[] receiveData = new byte[1024]; 
       while (true) { 
        DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length); 
        serverSocket.receive(receivePacket); 
        String sentence = new String(receivePacket.getData()); 
        System.out.println("Message: " + sentence); 
       } 
      } catch (IOException e) { 
      } 
     } 
    } 

    class Sender extends Thread { 
     public void run() { 
      try { 
       DatagramSocket clientSocket = new DatagramSocket(); 
       InetAddress IPAddress = InetAddress.getByName("localhost"); 
       byte[] sendData = new byte[1024]; 
       while (true) { 
       BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in)); 
       String message = inFromUser.readLine(); 
       sendData = message.getBytes(); 

       DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, 9876); 
       clientSocket.send(sendPacket); 
       } 
      } catch (IOException e) { 
      } 
     } 
    } 

} 

ответ

2
String sentence = new String(receivePacket.getData()); 

Обычная проблема. Игнорирование длины дейтаграммы. Исправить следующим образом:

String sentence = new String(receivePacket.getData(), receivePacket.getOffset(), receivePacket.getLength()); 
+0

Отлично, это именно то, что я искал! Спасибо за помощь! – Auborey

+1

@Auborey - Пожалуйста, примите ответ, если он сработает для вас. Узнайте, как принять ответ ---> http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work –