我正在使用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);
}
答案 0 :(得分:1)
String info = new String(get.getData());
问题在于接收代码。它应该是:
String info = new String(get.getData(), get.getOffset(), get.getLength());
目前你忽略了DatagramPacket
的实际长度,假设它填满了缓冲区,并填满了String
垃圾。