public class MyClass{
static final String BROADCAST = "Broadcasting";
public static final int PORT = 12344;
public static String host = "localhost";
public static void main(String[] args) {
// TODO Auto-generated method stub
DatagramSocket serverSocket;
try {
serverSocket = new DatagramSocket(PORT);
InetAddress addr = InetAddress.getByName(host);
byte[] sendData = BROADCAST.getBytes();
DatagramPacket sendPacket = new DatagramPacket(
sendData, //data byte array
sendData.length, //number of bytes
addr, //destination host address
PORT); //destination port
serverSocket.send(sendPacket);
byte[] rcvData = new byte[1024];
DatagramPacket rcvPacket = new DatagramPacket(
rcvData, rcvData.length);
//packet gets filled in by receive
serverSocket.receive(rcvPacket);
//Why the two Strings are not the same?
//Why the bytes derived from the same string different?
byte[] a = rcvData;
byte[] b= BROADCAST.getBytes();
System.out.println(a.equals(b));
System.out.println(new String(a));
System.out.println(new String(b));
System.out.println((new String(a).equals(new String(b))));
} catch (SocketException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
等価文字列に変換することができません。文字列Iは</p> <p>1)Iは、getByte()メソッドを使用して得たバイト配列が異なっていることに気づいた
2)コードのaとbの文字列はまったく同じですが、それらは等しくありません。私はあなたがバイトaとbがdifferntサイズ使用されていることexpect.Mayものを達成することができますトリム()の助けによって考える
false
Broadcasting
Broadcasting
false
デバッガを使用して 'real'データを見ることができません:それはすべき
? –
rcvDataは長さ1024のbyte []ですが、 "Broadcasting" .getBytes()はより短くなければなりません。また、配列を比較する方法ではありません(Arrays.equals(arr1、arr2)を使用する必要があります)。 –
'a'の長さは1024なので、' b'の長さは(おそらく)12です - どのようにそれらの2つが等しいと思いますか?しかし実際には、https://stackoverflow.com/questions/8777257/equals-vs-arrays-equals-in-javaに見られるように、事態はさらに悪化します。 –