• 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
user73

multiple filetransfer via sockets

3 posts in this topic

Hey guys I have a general network programming issue I hope someone here can help with. I'm familiar with win32 general API programming as well as the socket APIs. My problem is dealing with multiple simultaneous file transfers being sent in a way my code doesn't expect.

 

Here is the overall idea:

 

Server initiates a file transfer via "sendfile" command and basically my client acknowledges and parses the data in the same recv loop as used for the communications channel.

 

Server sends over socket "sendfile:filename:size" followed by the actual file in a format like this:

 

"sendfile:[filedata]"

"sendfile:[filedata]" until the file is sent in its entirety (2048 byte buffer)

 

The client simply:

 

while(connected)

{

 if(strcmp(recvbuffer,"sendfile:",9)==0) { handlefile(recvbuffer[9],len-9);

 else if() ; blah blah

}

 

This works perfectly however sometimes the data will be received by the client without the initial "sendfile:" part so my parsing code will miss some data and the file becomes corrupt.

 

My issue is that sometimes the underlying network will send half the data followed by the other half but my code expects each recv buffer to be preceeded by the string indicating a transfer is taking place.

 

I imagine file transfer is a very well understood topic but I'm not sure how to solve this problem. Any ideas/suggestions are greatly appreciated!

 

Thanks again.

0

Share this post


Link to post
Share on other sites

TCP is not a packet protocol, it is a stream protocol. Calls to send() are not matched 1:1 to calls to recv().

0

Share this post


Link to post
Share on other sites

You are certainly right.

 

How would you suggest I accomplish what essentially is file transfer over the same channel as communication? Or even simply two file transfers over the same channel. And by channel I mean the one socket connection in case it wasn't clear.

0

Share this post


Link to post
Share on other sites

The FAQ has information about this, as does many threads within this forum.

You need to build a packetized structure yourself, where each packet contains a type code, a size field, and then that much data.

When reading from the TCP socket, you keep buffering data until the buffer contains at least one full packet, then you remove and handle that packet from your buffer, and repeat.

 

So, for example, you could have the following packet headers:

 

struct start_file_transfer {
  uint16 p_type;
  uint16 p_size;
  uint16 transfer_id;
  uiint64 file_size;
  ubyte name[];
};
 
struct file_transfer_chunk {
  uint16 p_type;
  uint16 p_size;
  uint16 transfer_id;
  uint64 chunk_offset;
  ubyte data[];
};
 
struct end_file_transfer {
  uint16 p_type;
  uint16 p_size;
  uint16 transfer_id;
};

 

Now, send a start packet, followed by some number of chunk packets (with, say, 48 kB of data each,) followed by an end packet; that completes a particular file transfer operation. Because each separate transfer is identified by an id, you can tell each incoming packet apart.

1

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