2012-04-19 1 views
0

これは私が苦労している最終的なハードルです。UDPに関するその他の問題

私はクライアントが他のクライアントと通信することを許可して、メッセージにターゲットクライアント名を付加します。

イアンは、法案と通信したい場合例えば、彼のように入力します。

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. のequals()ように
  3. マッチ()

とが含まれていますが、すべて失敗します。名前の長さが記憶されているので推測しています。だから、ちょうど例えばbill - 4に保存されている名前のサイズをどうやって減らすことができますか?

いいえお返事

+1

チャットのようなプログラム(または信頼性を必要とするもの)については、UDPの代わりにTCPを使うことを考えてください。 – RageD

+0

@ RageDの注釈で詳しく述べると、これは、UDPが、送信されたのと同じ順序でメッセージが受信されることを保証しないためです。一方、TCPは順序を保証します。 – user1329572

+0

私はTCPを使うことができません - 私はUDPを使う必要があります - 他のオプションはありません – Katana24

答えて

1

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

関連する問題