UDP接收数据
问题描述:
我在用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每个打印的到底有许多小广场(我没有足够的声誉插入图片,抱歉)
答
的问题是在这里的服务器代码:
String string = new String(data,0,data.length);
你基于数据缓冲区的整体尺寸构建一个String ,而不是接收的字节数。因此,如果数据包小于最后一个数据包,则该数据包的任何附加字节仍在缓冲区中。
需要调用datagramPacket.getLength()
获得该值:
String string = new String(data,0,datagramPacket.getLength());
我it.And你能看看这张照片[打印](https://drive.google.com/file/? d/0BxejIA_xra_SQVFBT0hsSE9mcXM/view?usp = sharing)。正方形很奇怪。 – HelloSilence
这些可能是缓冲区中的不可打印字符。在应用上述修复程序后,这仍然发生吗? – dbush
应用代码后就可以了。非常感谢。^ _ ^ – HelloSilence