[英]UDP receive data
我正在使用 IntelliJ Idea 在 Mac 中编写有关 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
,并输入一些东西。这是输入和打印。
input
123456
abcdef
你好
print
IP 是 192.168.3.2 123456
IP是192.168.3.2 abcdef
IP 是 192.168.3.2 hellof
1.第三个打印有另一个'f'
2.每次打印的最后都有很多小方块(我没有足够的声誉来插入图片,抱歉)
问题出在服务器代码中:
String string = new String(data,0,data.length);
您正在根据数据缓冲区的整个大小构造一个 String,而不是接收到的字节数。 因此,如果数据包比上一个小,则该数据包中的任何其他字节仍在缓冲区中。
您需要调用datagramPacket.getLength()
来获取该值:
String string = new String(data,0,datagramPacket.getLength());
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.