UDP的更多问题

时间:2012-04-19 15:26:06

标签: java udp

好的,这是我正在努力的最后一个障碍。

我尝试允许客户端在将目标客户端名称作为消息前缀时与其他客户端进行通信。

例如,如果Ian想与账单沟通,他会输入:

bill hi mate

现在,当新客户端连接到服务器时,它们的名称存储在数组列表中。由于这使用数据包和字节缓冲区,这意味着当我存储名称时,它还存储该名称的长度。默认情况下,服务器上的数据包缓冲区大小为512,因此每个名称长度为512。

直到现在这还不是问题。我已经做了以下事情来获得客户想与之沟通的人:

else 
{
    System.out.println( "Client said: "+response+"\nPacket Size: "+packet.getLength()+"\nString Length: "+response.length() );
    String [] usrInput = response.split( " " );
    System.out.println( "Length of split string: "+usrInput.length );
}

它将输入拆分为数组,并查看数组的第一个名称。所以,从上面来看,我们会把账单放在第一位。

这是我出错的地方;我尝试使用:

  1. 含有()
  2. 等于()
  3. 匹配()
  4. 等等但都失败了;我猜是因为存储了名称的长度。那么如何减少存储的名称的大小,例如,bill-4?

    干杯

1 个答案:

答案 0 :(得分:1)

您正在错误地从数据包构造字符串。 DatagramSocket包含自己的实际长度。你应该使用它,而不是整个字节数组的长度。