2015-09-07 185 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