ANSWER IS MY OTHER COMMENT
I have a problem, I’m sending user and password String via DatagramPacket and DatagramSocket to a remote machine and I want to do a select statement in a database, but the thing is that the received string appears to be what it is supossed to be,here some code:
//build and send method
public void packetCompose(String user, String password) {
try {
byte[] userBytes = user.getBytes();
byte[] passwordBytes = password.getBytes();
byte[] buf = new byte[256];
System.arraycopy( userBytes , 0, buf, 0, Math.min( userBytes.length, 128 ) );
System.arraycopy( passwordBytes, 0, buf, 128, Math.min( userBytes.length, 128 ) );
DatagramPacket packet = new DatagramPacket(buf, 256, serverAddress, 4445);
socket.send(packet);
} 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();
}
}
and now the decompose of the packet method
public void packetDecompose(DatagramPacket packet) {
// packet has this structure
// 128 bytes user String
// 128 bytes password String
clientAddress = packet.getAddress();
String user = new String(packet.getData(),0,128);
String password = new String(packet.getData(),128,128);
System.out.println("Packet content: \nuser: "+user+"\npassword: "+password);
boolean exists = userExists(user, password);
byte[] buf = new byte[128];
if(exists) {
System.out.println("User exists");
System.arraycopy( accessGranted.getBytes(), 0, buf, 0, Math.min(
accessGranted.getBytes().length, 128 ) );
send(new DatagramPacket(buf, 128, clientAddress, 4445));
} else {
System.out.println("User does not exist");
System.arraycopy( accessDenied.getBytes(), 0, buf, 0, Math.min(
accessDenied.getBytes().length, 128 ) );
send(new DatagramPacket(buf, 128, clientAddress, 4445));
}
}
public boolean userExists(String user, String password) {
boolean exists = false;
System.out.println("user: "+user.equals("asdf"));
System.out.println(" pass: "+password.equals("asdf"));
try {
ResultSet result = dataBase.Select("SELECT ipaddress FROM users
WHERE name='"+user+"' AND pass='"+password+"'");
while(result.next()) {
exists = true;
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return exists;
}
Im introducing asdf as user and password via interface of application so the lines:
System.out.println("user: "+user.equals("asdf"));
System.out.println(" pass: "+password.equals("asdf"));
should print true, but they print false.
Any suggestion on this? Thank you all in advance
I finally managed to resolve it, thanks to Peter Lawrey for giving some help.
You have to insert the first byte containing the length of the user String and same with pasword, so when you decompose the packet you can get user and password without null padding.
Here is the code:
Compossing:
Decompossing: