0

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

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

例如,如果 Ian 想与 bill 交流,他会输入:

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. 火柴()

等等,但都失败了;我猜是因为存储的名称的长度。那么如何将存储的名称的大小减少到例如 bill - 4 呢?

干杯

4

1 回答 1

1

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

于 2012-04-19T22:45:23.713 回答