Hi !
Featured games (91)
games approved by the League of Dukes
Games in Showcase (757)
Games in Android Showcase (229)
games submitted by our members
Games in WIP (844)
games currently in development
News: Read the Java Gaming Resources, or peek at the official Java tutorials
    Home     Help   Search   Login   Register   
Pages: [1]
  ignore  |  Print  
  designing protocol for multiplayer game  (Read 2317 times)
0 Members and 1 Guest are viewing this topic.
Offline zidsal

Senior Newbie

« Posted 2014-05-21 14:19:58 »

So I'm doing all of the networking for my game with out the use of any library (learning purposes). Currently the transport layer uses TCP and networking is done with NIO. As I am using TCP it means there is no guarantee that all of the bytes for a message will arrive at the same time e.g.

lets say my packet is AABBBAAB I might receive it as AAB BBAA B.

This means that I need a way to detect where a packet starts and were it ends. For this reason the first part of my message should logically be a length so we can see if we need to wait for more bytes to finish building the packet. The next part of my packet is a msg ID that basically tells the  receiver what packet you need to build (e.g a ping packet, login packet e.t.c).

However I'm currently stuck on how to structure the rest of the message. Detecting a packets length and Msg ID is easy as they are always 5 and 3 bytes in size respective. What are the best ways to structure the rest of the packet? I need an easy way to identify the remaining fields in the message (basically the content of the message).

as an example lets say I have a packet

Login packet which has fields of 
username = foo
password  = bar

I could structure the message like so 00100001foobar so that we know the rest of the message is 10 bytes, the packet belongs to login as the id is 001 but how do we know what fields belong to the username and what fields belong to the password?

Offline Opiop
« Reply #1 - Posted 2014-05-21 15:16:02 »

I think you have it wrong; TCP ensures the packet is received, UDP doesn't. Packets are received as whole packets, not streamed in. You shouldn't have this issue.
Offline zidsal

Senior Newbie

« Reply #2 - Posted 2014-05-21 15:20:47 »

you sure about that? TCP is a stream protocol and as such it doesn't know what a packet is.  The bytes streamed in TCP are reliable and ordered but it has no guarantee that the entire packet will come in at once. I.e TCP does not provide you with a a 1:1 relationship to the physical packets sent (because TCP doesn't know what a packet is).
Games published by our own members! Check 'em out!
Legends of Yore - The Casual Retro Roguelike
Offline Herjan
« Reply #3 - Posted 2014-05-21 15:51:16 »

opiop65 was true, packets are indeed received as whole packets, but regardless of this, an old trick is to simply separate the different fields you send in a packet, f.e.:


Even if you get 17 packets of one character, you still know what's the username/password.
Pages: [1]
  ignore  |  Print  

EgonOlsen (45 views)
2018-06-10 19:43:48

EgonOlsen (25 views)
2018-06-10 19:43:44

EgonOlsen (47 views)
2018-06-10 19:43:20

DesertCoockie (202 views)
2018-05-13 18:23:11

nelsongames (127 views)
2018-04-24 18:15:36

nelsongames (126 views)
2018-04-24 18:14:32

ivj94 (867 views)
2018-03-24 14:47:39

ivj94 (128 views)
2018-03-24 14:46:31

ivj94 (771 views)
2018-03-24 14:43:53

Solater (143 views)
2018-03-17 05:04:08
Java Gaming Resources
by philfrei
2017-12-05 19:38:37

Java Gaming Resources
by philfrei
2017-12-05 19:37:39

Java Gaming Resources
by philfrei
2017-12-05 19:36:10

Java Gaming Resources
by philfrei
2017-12-05 19:33:10

List of Learning Resources
by elect
2017-03-13 14:05:44

List of Learning Resources
by elect
2017-03-13 14:04:45

SF/X Libraries
by philfrei
2017-03-02 08:45:19

SF/X Libraries
by philfrei
2017-03-02 08:44:05 is not responsible for the content posted by its members, including references to external websites, and other references that may or may not have a relation with our primarily gaming and game production oriented community. inquiries and complaints can be sent via email to the info‑account of the company managing the website of java‑
Powered by MySQL Powered by PHP Powered by SMF 1.1.18 | SMF © 2013, Simple Machines | Managed by Enhanced Four Valid XHTML 1.0! Valid CSS!