• Announcements

    • khawk

      Download the Game Design and Indie Game Marketing Freebook   07/19/17

      GameDev.net and CRC Press have teamed up to bring a free ebook of content curated from top titles published by CRC Press. The freebook, Practices of Game Design & Indie Game Marketing, includes chapters from The Art of Game Design: A Book of Lenses, A Practical Guide to Indie Game Marketing, and An Architectural Approach to Level Design. The GameDev.net FreeBook is relevant to game designers, developers, and those interested in learning more about the challenges in game development. We know game development can be a tough discipline and business, so we picked several chapters from CRC Press titles that we thought would be of interest to you, the GameDev.net audience, in your journey to design, develop, and market your next game. The free ebook is available through CRC Press by clicking here. The Curated Books The Art of Game Design: A Book of Lenses, Second Edition, by Jesse Schell Presents 100+ sets of questions, or different lenses, for viewing a game’s design, encompassing diverse fields such as psychology, architecture, music, film, software engineering, theme park design, mathematics, anthropology, and more. Written by one of the world's top game designers, this book describes the deepest and most fundamental principles of game design, demonstrating how tactics used in board, card, and athletic games also work in video games. It provides practical instruction on creating world-class games that will be played again and again. View it here. A Practical Guide to Indie Game Marketing, by Joel Dreskin Marketing is an essential but too frequently overlooked or minimized component of the release plan for indie games. A Practical Guide to Indie Game Marketing provides you with the tools needed to build visibility and sell your indie games. With special focus on those developers with small budgets and limited staff and resources, this book is packed with tangible recommendations and techniques that you can put to use immediately. As a seasoned professional of the indie game arena, author Joel Dreskin gives you insight into practical, real-world experiences of marketing numerous successful games and also provides stories of the failures. View it here. An Architectural Approach to Level Design This is one of the first books to integrate architectural and spatial design theory with the field of level design. The book presents architectural techniques and theories for level designers to use in their own work. It connects architecture and level design in different ways that address the practical elements of how designers construct space and the experiential elements of how and why humans interact with this space. Throughout the text, readers learn skills for spatial layout, evoking emotion through gamespaces, and creating better levels through architectural theory. View it here. Learn more and download the ebook by clicking here. Did you know? GameDev.net and CRC Press also recently teamed up to bring GDNet+ Members up to a 20% discount on all CRC Press books. Learn more about this and other benefits here.
Sign in to follow this  
Followers 0
ForestBit

Inconsistent Sending of Data

7 posts in this topic

For my first networking project, I am working on a simple client/server chat, using TCP.

 

The idea was, make the communication lines (i.e. threads), and send packets over them (an id and packet-specific information).

 

It seems it works, but not consistently.

 

Here are some pictures to describe the problem: 

 

Not working:

33mly7d.jpg

 

 

Working:

 

33otrnc.png

 

Left is server, right is client.

 

I get both of these result only by running it - no code changes involved. It seems roughly 25% of the time, it works.

 

The server has two lines at the top. The first is how many bytes were received. The second lists the bytes.

 

On the bottom of the client, it lists what bytes were written. The actual communication is through a DataOutputStream through the socket's OutputStream. I used another DataOutputStream with a ByteArrayOutputStream. In every place the first writes, the second does as well. It seems, then, that the bytes written does not change.

 

As for the bytes themselves. The first 0 is the packet id (there is only one packet currently). The load of this packet was a single string, a name. It seems writeUTF writes the length of the string as a short (two bytes, the next 0 and 3), followed by the characters.

 

The reason it fails when the bytes don't make it is that it reads the packet id correctly, tries reading the short for the length, but there is nothing left.

 

What might be causing this inconsistency?

Edited by ForestBit
0

Share this post


Link to post
Share on other sites


It seems it works, but not consistently.

 

This is usually a sign of a Thread problem: race condition or something else.  But this is too complicated a situation without some code.  Try commenting stuff out until you have the smallest example that exhibits the behavior.  Odds are you'll figure it out before this, but if not, then you can post the code.

 

Also, try a network protocol analyzer to make sure it's really doing what you think it is doing... http://www.wireshark.org/

1

Share this post


Link to post
Share on other sites

It will help if you share the portion of code where your server is reading and where you  write to your server...

 

It will also help if you paste the code where you initialize your sockes and Input/Output streams.

0

Share this post


Link to post
Share on other sites

A long while ago I made a simple little open-world 3D fps shooter using TCP, sort of a warm-up project to learn the ins-and-outs of game dev in some sense, and discovered the hard-way that TCP "packets" don't always arrive just how they were sent.. They can arrive in fragments, or clumped together with other packets, which requires a method for extracting and reconstituting the original packets.. At least, for programs like multiplayer games. Otherwise, this 'streaming' setup works great for things like file send/receive actions. This might be the issue you are having.

2

Share this post


Link to post
Share on other sites

A long while ago I made a simple little open-world 3D fps shooter using TCP, sort of a warm-up project to learn the ins-and-outs of game dev in some sense, and discovered the hard-way that TCP "packets" don't always arrive just how they were sent.. They can arrive in fragments, or clumped together with other packets, which requires a method for extracting and reconstituting the original packets.. At least, for programs like multiplayer games. Otherwise, this 'streaming' setup works great for things like file send/receive actions. This might be the issue you are having.

 

That's really because TCP "packets" aren't packets. When you send() on a TCP socket you're really writing to a stream. That's the abstraction TCP provides. I think most people fall into this trap when they start out with TCP though... I know I did!

0

Share this post


Link to post
Share on other sites

Sorry for the delay.

 

It appears I misunderstood TCP. Once I prefixed a packet length to sending it (and thus didn't read anything until enough information had arrived), it seems to work as expected.

0

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0