Dieses Problem hat mir die ganze Nacht den Kopf gerissen und ich kann nicht herausfinden, warum es nicht funktioniert. Also führe ich ein Client/Server-Programm aus und lasse den Client eine bestimmte Zeichenfolge über JOptionPane eingeben und dann an den Server senden. Der Server verfügt über ein Array von Strings und überprüft, ob die vom Client empfangene Zeichenfolge mit einer der Strings im Array übereinstimmt. Der Vergleich scheint jedoch fehlgeschlagen zu sein. Ich würde mich freuen, wenn mir jemand sagen könnte, warum ich auf dieses Problem stoße.Java if-Anweisung schlägt fehl, wenn zwei Strings verglichen werden
Unten ist der Code für meinen Server, Wo die if-Anweisung innerhalb der for-Schleife versagt, und das Array (usrs):
String [] usrs = {"Hassan","Jimmy","Bob","Kevin"};
DatagramSocket skt = null;
try {
skt = new DatagramSocket(2002);
byte [] buffer = new byte [1000];
String okay = "OK";
while(true) {
System.out.println("Inside loop");
DatagramPacket request = new DatagramPacket(buffer,buffer.length);
skt.receive(request);
String userName = (new String(request.getData()));
System.out.println(userName);
for (int i=0; i < usrs.length; i++) {
System.out.println(usrs[i]);
//if user exists in list of verified users,we send the RSA encrypted AES Key using that user's public key which we receive from the user
if (userName.equals(usrs[i])) {
System.out.println("Inside If");
byte [] okayMsg = okay.getBytes();
DatagramPacket reply = new DatagramPacket(okayMsg,okayMsg.length,request.getAddress(),request.getPort());
skt.send(reply);
skt.close();
}
}
}
Hier ist mein Code für den Client ist:
try {
skt = new DatagramSocket();
String userName = JOptionPane.showInputDialog(null,"Please enter your username");
byte [] b = userName.getBytes();
InetAddress host = InetAddress.getByName("localhost");
int serverSocket = 2002;
DatagramPacket request = new DatagramPacket(b,b.length,host,serverSocket);
skt.send(request);
byte [] buffer = new byte[1000];
DatagramPacket reply = new DatagramPacket(buffer,buffer.length);
skt.receive(reply);
String replyData = new String(reply.getData());
System.out.println(replyData);
skt.close();
} catch(Exception e) {
e.printStackTrace();
};
Und hier ist die Ausgabe:
Inside loop
Hassan
Hassan
Jimmy
Bob
Kevin
Inside loop
Können Sie sicherstellen, dass keine Leerzeichen oder andere unsichtbare Zeichen vorhanden sind? –
Von der Ausgabe scheint es, für die Zeichenfolge "Hassan" übergeben ?? –
Nein, hat es nicht! es ist nicht in "Inside if" Block –