It's not a secret anymore!
The moose likes Sockets and Internet Protocols and the fly likes String object != String object? Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login
JavaRanch » Java Forums » Java » Sockets and Internet Protocols
Bookmark "String object != String object?" Watch "String object != String object?" New topic

String object != String object?

Jeff Jones

Joined: May 10, 2001
Posts: 2
I have a question about the Strings being
sent through a UDP socket and then having
a new hash code upon retrieval. For example,
I have a string "Hello" and I cast it as
bytes and send it in a Datagram to a server:
// Client does this
byte[] sendData = new byte[1024];
sendData = myString.getBytes();
DatagramPacket sendPacket =
new DatagramPacket(sendData, sendData.length, IP, port);
The server receives the packet and the string
is cast from the data received.
// Server does this
String socketString = new String(receivedPacket.getData());
The server has a Hashtable, so it looks up the string
"Hello" which is supposed to be in the Hashtable, but
it isn't there. Why is that? I then create another
String regularString = "Hello";
and look it up in the Hashtable and it is there.
So I take the regular String and use the equal()
method to the string passed through the UDP socket
and they say they are not equal?
How do I make the string that came through the UDP
socket a regular normal string like it was before
it left my client?
[This message has been edited by Jeff Jones (edited May 10, 2001).]
Ryan Langley
Ranch Hand

Joined: May 10, 2001
Posts: 46

Have you tried printing the value of the string that you receive on the server side to the screen? Your logic for the byte[] to stream looks correct, for instance take this code example:

public class ByteToString {
public static void main(String[] args) {
String myString = "Hello";
byte[] sendData = new byte[1024];

sendData = myString.getBytes();
String socketString = new String(sendData);

if(socketString.equals("Hello")) System.out.println(socketString);

This code does indeed print "Hello" to screen. The only thing different from your code snippet is the fact that it is not passing it to a server first. I think something may be incorrect with the way you are passing it, or possibly the order you are passing it. I'm not sure because I've only used sockets(TCP) for communication and not datagrams(UDP). Remember UDP sends and receives packets of bytes without worrying about lost data or missing packets. You may want to make sure that the byte size is large enough so that you don't lose data. If this is the problem, it may be more appropriate to use sockets to ensure that the integrity of your data stays intact.

Anyway, I'd definitely check to make sure you're getting the value that you think you are getting. Hope this helped!


Jeff Jones

Joined: May 10, 2001
Posts: 2
Thank you for the reply and I had the server
print out the string in a sentence to make sure
it did look the same as the original string sent.
System.out.println("--->" + socketString + "<----");<br /> output:<br /> --->Hello<---
So, I know that there wasn't any data loss and
the string does not have any visible additions.
I am thinking that maybe the string is changed
from a particular format during the byte transition
and then when it is recast as a string on the
server side that it is no longer the same object.
If it were, then the hashCode() would be the same.
Just my guess, but I am not sure how to change
the string back to the way before it was before
I sent it through the UDP socket.
karl koch
Ranch Hand

Joined: May 25, 2001
Posts: 388
probably you got some whitespaces or something. did you check lenght of strings ?
maybe trim() helps ?

I agree. Here's the link:
subject: String object != String object?
It's not a secret anymore!