Jump to content
  • Advertisement
Sign in to follow this  
helldoggie666

[java] How sending something over a network?

This topic is 4165 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

Hi, I'm trying to make a little network game. Till now i'm sending my commands just as strings over the network. But for sending the player object,I don't what is the best thing to do. I can send all values of the player object as string and rebuild it again on the other side. I guess it's better to use something like a binarystream? What is the fastest way to do this? Thx Tim

Share this post


Link to post
Share on other sites
Advertisement
I suppose that the fastest would be a binary transmission. But that fixes you to a known format on both sides. Which if you are good with then it's all good.

Best thing to do in that case is to include a versioning indicator, in the event you ever want to expand on what you are sending. You know, different data, or changing the size.

My devils advocate is saying that I've been nailed enough times going after speed increases instead of making something that works well. So I'd choose the path of whatever is easier to complete and finish... and if that's a bag of strings, I'm okay with it. When required, then revisit it for speed... then you got two implementations that you can compare and contrast.

Share this post


Link to post
Share on other sites
You can send Objects through a socket, but I wouldn't recommend that due to the serialization cost. Instead, why not work with datagram packets, or even NIO and ByteBuffers?

You could use something like this:


public interface Transmittable {

ByteBuffer toByteBuffer();

void fromByteBuffer(ByteBuffer buf);

}

public void GameNetworkCommand implements Transmittable {

public long timestamp; // 8 bytes
public int senderId; // 4 bytes
public int targetId; // 4 bytes

public ByteBuffer toByteBuffer() {

// Allocate the Buffer
ByteBuffer buf = ...;

buf.putXXX( xxx ); // Some header that you may need

buf.putLong( timestamp );
buf.putInt( senderId );
buf.putInt( targetId );

}

public void fromByteBuffer(ByteBuffer buf) {

int header = getHeaderFrom( buf );
long timestamp = buf.getLong();
// ...
}
}



Remember to use the position of the ByteBuffer wisely, or you may read/write corrupt data and have headaches. Overall, it is very simple, and with a bit of tweak can be reusable and quite fast, given a game architecture that knows how to benefit of it.

Share this post


Link to post
Share on other sites
I'm using serialized objects now.
Ok, I will remove that out of the code and try it on
some other way. Make some tests with those things.
Thx for the responses :-).

Tim

Share this post


Link to post
Share on other sites
So if you want to send a bigger object to the player, instead
of just a command. Let say a map area or something.
Would you still use the bytearray? So probably splitting the
object into multiple parts then.

Something like


int counter;

long timestamp;
int senderId;
int targetId;


byte[] bytes = new byte[100];//putting a part of the object in it




And afterwards putting the object back together in the right order, or
am i wrong with this? Cause it seems to me, if you have a player object
with 100 variables in it, it's pretty hard to put every variable one by
one into the object you send over the network.

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

We are the game development community.

Whether you are an indie, hobbyist, AAA developer, or just trying to learn, GameDev.net is the place for you to learn, share, and connect with the games industry. Learn more About Us or sign up!

Sign me up!