2015-09-07 160 views
2

我在用IntelliJ Idea.I試圖從客戶端讀取數據並打印服務器接收到的數據,以編程有關UDP的UDP。這裏是代碼。UDP接收數據

Server

public class UDPServer { 
    public static void main(String[] args) throws IOException { 

     DatagramSocket datagramSocket = new DatagramSocket(11111); 
     byte[] b = new byte[1024]; 
     DatagramPacket datagramPacket = new DatagramPacket(b,1024); 

     while (true){ 
      datagramSocket.receive(datagramPacket); 

      byte[] data = datagramPacket.getData(); 
      InetAddress address = datagramPacket.getAddress(); 
      String ip = address.getHostAddress(); 
      String string = new String(data,0,data.length); 
      System.out.println("IP is "+ip+" "+string); 
     } 
    } } 

Client

public class UDPClient { 
    public static void main(String[] args) throws IOException { 
     DatagramSocket datagramSocket = new DatagramSocket(); 
     BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in)); 

     String dataString; 
     while((dataString = bufferedReader.readLine())!=null){ 
      if(dataString.equals("886")){ 
       System.out.println("UDPClient exit"); 
       break; 
      } 
      DatagramPacket datagramPacket = new DatagramPacket(dataString.getBytes(),dataString.getBytes().length, InetAddress.getByName("192.168.3.2"),11111); 

      datagramSocket.send(datagramPacket); 

     } 

     datagramSocket.close(); 
    } 

} 

我跑了Server,然後再開始Client,並輸入something.Here的輸入和打印。

input

ABCDEF

你好

print

IP是192.168.3.2 123456

IP是192.168.3.2abcdef

IP是192.168.3。2hellof

1. THRID打印有另一個「F」

2.at每個打印的到底有許多小廣場(我沒有足夠的聲譽插入圖片,抱歉)

回答

1

的問題是在這裏的服務器代碼:

String string = new String(data,0,data.length); 

你基於數據緩衝區的整體尺寸構建一個String ,而不是接收的字節數。因此,如果數據包小於最後一個數據包,則該數據包的任何附加字節仍在緩衝區中。

需要調用datagramPacket.getLength()獲得該值:

String string = new String(data,0,datagramPacket.getLength()); 
+0

我it.And你能看看這張照片[打印](https://drive.google.com/file/? d/0BxejIA_xra_SQVFBT0hsSE9mcXM/view?usp = sharing)。正方形很奇怪。 – HelloSilence

+0

這些可能是緩衝區中的不可打印字符。在應用上述修復程序後,這仍然發生嗎? – dbush

+0

應用代碼後就可以了。非常感謝。^ _ ^ – HelloSilence