2016-05-06 14 views
0

私のコードは以下の通りです。すべては私が望むように動作しますが、メッセージが受信されると、このようなやりかたで多くのボックスがあります。「メッセージ:hello← ▀▀▀▀af▀▀▀ "どのように受け取って印刷するのが"メッセージ:こんにちは "なのはどうすればいいですか?私はどんな助けにも大いに感謝します。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 –

関連する問題