1

DatagramSocketとDatagramPacketを使用してJavaでチャットアプリケーションを開発しています。受信したデータパケットはバイト単位です。しかし、私は未使用のバイトを切り刻む方法を知りませんここにコードがあります:-

String s,pack[];

byte[] data=new byte[100];

data=dp.getData();//dp is instance of DatagramPacket

s=new String(data)

pack=s.split("-");//Username-ConnectionProtocol-IPaddress

このコードでは、最後の分割でIPアドレスと未使用のデータがバイト単位でほぼ取得されます。したがって、未使用のデータをバイト単位で切り取るソリューションが必要です。127.0.0.1 [] [] [] [] [] [] [] [][]....のように

ストリングパックを使ってチョップしようとしましsubtstring()たが、長さが異なります。だから私はこの問題でいくつかの助けが必要です。

4

2 に答える 2

2
  • 割り当てた100バイトを破棄するnew byte[100]ため、でデータを初期化する必要はありません。dp.getData()
  • 送信者が必要以上のデータを書き込んだ場合、何バイトを切り落とす必要があるかを知ることは不可能です。送信者は、送信するバイト数を示すか、役に立たないバイトと有用なバイトを区別できるヒューリスティックを考え出す必要があります。

たとえば、未使用のバイトが常にパケットの最後にあり、それらが常にゼロに設定されていることがわかっている場合は、次のコードを使用して文字列を設定できます。

data=dp.getData();
int pos = data.length-1;
while (pos != 0 && data[pos] == 0) {
    pos--;
}
s=new String(data, 0, pos);
于 2012-06-25T12:54:28.663 に答える
1

パケットの未使用部分がゼロになっていると仮定すると、次の種類のコードを使用できます。

static String[] parsePacket(byte[] p) {
  return new String(p, 0, len(p)).split("-");
}
static int len(byte[] p) {
  for (int i = 0; i < p.length; i++) if (p[i] == 0) return i;
  return p.length;
}
于 2012-06-25T12:56:18.873 に答える