Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 7595009
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 30, 20262026-05-30T21:33:50+00:00 2026-05-30T21:33:50+00:00

I’m developing a client and a server file transfer application with C++ sockets over

  • 0

I’m developing a client and a server file transfer application with C++ sockets over UDP (SOCK_DGRAM). For a PUT method, I have the following execution (after handshaking) :

client

Send a packet;
if time_out
    send the packet again;
else  //ack received
    send a new packet;

server

wait for the first packet;
send acknowledge;
while(!EOF)
    Get a packet;
    Send an ack;

Where EOF is basically checking if I’ve received the whole file by comparing to a file size that I send during handshake.

Packets can be lost at any point during this exchange. The client can send a data packet that gets lost. It’ll time out waiting for an ACK and will resend the packet. The server receives a data packet and sends an ACK. That ACK can be lost, at which point the client times out and re-sends his data packet. Since these packets have a numbered sequence, we can just disregard packet we’ve received multiple times.

My confusion occurs at the end of the file transfer. The client just sent the packet containing the last bits of the file. The server successfully receives it and sends his ACK. This packet gets lost. The server application is now outside of the while loop because he’s written the last bits to the file and, from his point of view the file transfer was successful. However, the client never received the ACK and so times out and re-sends the data packet. What should happen here? The server is not listening or is listening for a new request, not data. At which point should the client or server consider the transfer complete and stop trying to communicate?

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-30T21:33:51+00:00Added an answer on May 30, 2026 at 9:33 pm

    It sounds like you’re reinventing TFTP, but with client and server roles backwards. Are you sure you need to do this? It’s a very inefficient protocol due to lack of a sliding window or data pipeline.

    I see 3 solutions to your conundrum:

    • A three-way handshake at the end of the file transfer. After receiving the last data block, the server not only sends an ACK but it waits for the client to ACK the ACK. When that happens, the server knows that the client knows the file transfer is complete. If the server never receives the ACK of the ACK, it periodically resends its ACK of the last data block.
    • The server remembers completed file transfers for several minutes after they’re finished (or several RTTs, whichever is greater). If, during that time, it receives any data block from a client for a file transfer that was supposed to be already complete, the server just ACKs it without doing anything and resets the end-of-transfer timer for that file transfer. This is more complex but has the advantage over the previous solution that the server was able to move on and do other work after the file transfer completed.
    • The server responds with an error (a NAK) if it ever receives any data block that is not part of an active file transfer. That goes for whether it’s part of a nonexistent, invalid, or already-completed transfer. This is the simplest to implement, but also the ugliest because the client has to terminate with an error when it receives that NAK. But maybe that’s OK, because the file transfer was still successful from the server’s point of view.
    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

I have just tried to save a simple *.rtf file with some websites and
I have a string like this: La Torre Eiffel paragonata all’Everest What PHP function
I have a reasonable size flat file database of text documents mostly saved in
I am trying to loop through a bunch of documents I have to put
link Im having trouble converting the html entites into html characters, (&# 8217;) i
I have a jquery bug and I've been looking for hours now, I can't
this is what i have right now Drawing an RSS feed into the php,
I have a French site that I want to parse, but am running into
I want use html5's new tag to play a wav file (currently only supported
I'm using v2.0 of ClassTextile.php, with the following call: $testimonial_text = $textile->TextileRestricted($_POST['testimonial']); ... and

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.