0

これが私が苦労している最後のハードルです。

クライアントがターゲットクライアント名をメッセージの前に付けるときに、クライアントが他の1つのクライアントと通信できるようにしようとしています。

たとえば、イアンが請求書と通信したい場合、彼は次のように入力します。

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. contains()
  2. equals()
  3. matches()

などですが、すべて失敗します。格納されている名前の長さのために推測しています。では、保存されている名前のサイズを、たとえば、bill-4に減らすにはどうすればよいでしょうか。

乾杯

4

1 に答える 1

1

パケットから文字列を誤って作成しています。DatagramPacketには、独自の実際の長さが含まれています。バイト配列全体の長さではなく、それを使用する必要があります。

于 2012-04-19T22:45:23.713 に答える