UDP java没有发送完整的字符串

时间:2018-03-28 02:03:38

标签: java udp send

我正在使用java和UDP做一个简单的投票系统。我有三台计算机,一台计算机是服务器,一台是候选人,另一台是投票。发送候选人并将其添加到服务器工作正常,但每当我必须将候选人数据发送到第三台计算机时,我的字符串永远不会被完全接收。每个候选者都存储在一个对象中,我存储每个候选人的姓名[String]和vote [int],所有这些都存储在一个arraylist中。

InetAddress IPres = InetAddress.getByName(IPresimp);
String name = candidate.get(pos).name;
String posi = Integer.toString(pos);
String candidate = name.concat(":" +posi);
set = new DatagramPacket(candidate.getBytes(), 0, candidaate.getBytes().length, IPres, get.getPort());
socket.send(set);

我这样发送它,所以每当我将候选人的名字发送到第三台计算机时,我也会发送我正在评估的职位,所以例如我应该发送类似“奥巴马:2”的内容。但每当我收到包裹时我只会得到“奥巴马”,我添加到字符串的任何内容都不会被发送。

接收代码:

try {
    byte[] buffer = new byte[400];
    get = new DatagramPacket(buffer, buffer.length);
    socket.receive(get);
    String info = new String(get.getData());
    System.out.println(info);
}
catch (IOException ex) {
    Logger.getLogger(Client.class.getName()).log(Level.SEVERE, null, ex);
} 

1 个答案:

答案 0 :(得分:1)

String info = new String(get.getData());

问题在于接收代码。它应该是:

    String info = new String(get.getData(), get.getOffset(), get.getLength());

目前你忽略了DatagramPacket的实际长度,假设它填满了缓冲区,并填满了String垃圾。